diff --git a/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java b/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java
new file mode 100644
index 00000000000..9bda68f1dab
--- /dev/null
+++ b/src/main/java/org/broadinstitute/hellbender/tools/CRAMIssue8768Detector.java
@@ -0,0 +1,144 @@
+package org.broadinstitute.hellbender.tools;
+
+import org.broadinstitute.barclay.argparser.*;
+import org.broadinstitute.hellbender.tools.filediagnostics.CRAMIssue8768Analyzer;
+import org.broadinstitute.hellbender.cmdline.CommandLineProgram;
+import org.broadinstitute.hellbender.cmdline.StandardArgumentDefinitions;
+import org.broadinstitute.hellbender.engine.GATKPath;
+import picard.cmdline.programgroups.OtherProgramGroup;
+
+/**
+ * A diagnostic tool that analyzes a CRAM file to look for possible base corruption caused by
+ * GATK issue 8768.
+ *
+ *
This issue affects GATK versions 4.3.0.0 through 4.5.0.0, and is fixed in GATK 4.6.0.0.
+ *
+ * This issue also affects Picard versions 2.27.3 through 3.1.1, and is fixed in Picard 3.2.0.
+ *
+ * The bug is triggered when writing a CRAM file using one of the affected GATK/Picard versions,
+ * and both of the following conditions are met:
+ *
+ *
+ * - At least one read is mapped to the very first base of a reference contig
+ * - The file contains more than one CRAM container (10,000 reads) with reads mapped to that same reference contig
+ *
+ *
+ * When both of these conditions are met, the resulting CRAM file may have corrupt containers containing reads
+ * with an incorrect sequence.
+ *
+ * This tool writes a report to an output text file indicating whether the CRAM file appears to have read base corruption caused by issue 8768,
+ * and listing the affected containers. By default, the output report will have a summary of the average mismatch rate for all suspected bad containers
+ * and a few presumed good containers in order to determine if there is a large difference in the base mismatch rate.
+ *
+ * Optionally, a TSV file with the same information as the textual report, but in tabular form, can be written
+ * using the "--output-tsv" argument.
+ *
+ * To analyze the base mismatch rate for ALL containers, use the "verbose" option.
+ *
+ * Works on files ending in .cram.
+ *
+ *
+ * Sample Usage:
+ *
+ * gatk CRAMIssue8768Detector \
+ * -I input.cram \
+ * -O output_report.txt \
+ * -R reference.fasta
+ *
+ *
+ * gatk CRAMIssue8768Detector \
+ * -I input.cram \
+ * -O output_report.txt \
+ * -R reference.fasta \
+ * --output-tsv output_report_as_table.tsv
+ *
+ */
+@ExperimentalFeature
+@WorkflowProperties
+@CommandLineProgramProperties(
+ summary = "Analyze a CRAM file to check for base corruption caused by GATK issue 8768",
+ oneLineSummary = "Analyze a CRAM file to check for base corruption caused by GATK issue 8768",
+ programGroup = OtherProgramGroup.class
+)
+public class CRAMIssue8768Detector extends CommandLineProgram {
+ // default average mismatch rate threshold above which we consider the file to be corrupt
+ private static final double DEFAULT_MISMATCH_RATE_THRESHOLD = 0.05;
+
+ @Argument(fullName = StandardArgumentDefinitions.INPUT_LONG_NAME,
+ shortName = StandardArgumentDefinitions.INPUT_SHORT_NAME,
+ doc = "Input path of CRAM file to analyze",
+ common = true)
+ @WorkflowInput
+ public GATKPath inputPath;
+
+ @Argument(fullName = StandardArgumentDefinitions.OUTPUT_LONG_NAME,
+ shortName = StandardArgumentDefinitions.OUTPUT_SHORT_NAME,
+ doc = "Output diagnostics text file",
+ common = true)
+ @WorkflowOutput
+ public GATKPath textOutputPath;
+
+ public static final String OUTPUT_TSV__ARG_NAME = "output-tsv";
+ @Argument(fullName = OUTPUT_TSV__ARG_NAME,
+ shortName = OUTPUT_TSV__ARG_NAME,
+ doc = "Output diagnostics tsv file",
+ optional = true)
+ @WorkflowOutput
+ public GATKPath tsvOutputPath;
+
+ @Argument(fullName = StandardArgumentDefinitions.REFERENCE_LONG_NAME,
+ shortName = StandardArgumentDefinitions.REFERENCE_SHORT_NAME,
+ doc = "Reference for the CRAM file",
+ common = true)
+ @WorkflowOutput
+ public GATKPath referencePath;
+
+ public static final String MISMATCH_RATE_THRESHOLD_ARG_NAME = "mismatch-rate-threshold";
+ @Argument(fullName = MISMATCH_RATE_THRESHOLD_ARG_NAME,
+ shortName = MISMATCH_RATE_THRESHOLD_ARG_NAME,
+ doc = "Mismatch rate threshold above which we consider the file to be corrupt",
+ optional = true)
+ public double mismatchRateThreshold = DEFAULT_MISMATCH_RATE_THRESHOLD;
+
+ public static final String VERBOSE_ARG_NAME = "verbose";
+ @Argument(fullName = VERBOSE_ARG_NAME,
+ shortName= VERBOSE_ARG_NAME,
+ doc="Calculate and print the mismatch rate for all containers",
+ optional=true)
+ public boolean verbose = false;
+
+ public static final String ECHO_ARG_NAME = "echo-to-stdout";
+ @Argument(fullName = ECHO_ARG_NAME,
+ shortName= ECHO_ARG_NAME,
+ doc="Echo text output to stdout",
+ optional=true)
+ public boolean echoToStdout = false;
+
+ private CRAMIssue8768Analyzer cramAnalyzer;
+
+ @Override
+ protected Object doWork() {
+ cramAnalyzer = new CRAMIssue8768Analyzer(
+ inputPath,
+ textOutputPath,
+ tsvOutputPath,
+ referencePath,
+ mismatchRateThreshold,
+ verbose,
+ echoToStdout);
+ cramAnalyzer.doAnalysis();
+ return cramAnalyzer.getRetCode();
+ }
+
+ @Override
+ protected void onShutdown() {
+ if ( cramAnalyzer != null ) {
+ try {
+ cramAnalyzer.close();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
+
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java b/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java
index 76a0410c777..83703d9f46d 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/PrintFileDiagnostics.java
@@ -8,8 +8,6 @@
import org.broadinstitute.hellbender.tools.filediagnostics.HTSAnalyzerFactory;
import picard.cmdline.programgroups.OtherProgramGroup;
-import java.io.File;
-
/**
* A diagnostic tool that prints meta information about a GATK input file.
*
@@ -43,8 +41,8 @@ public class PrintFileDiagnostics extends CommandLineProgram {
doc = "Outut file for diagnostics (must be a local file)",
optional = false,
common = true)
- @WorkflowInput
- public File outputFile;
+ @WorkflowOutput
+ public GATKPath outputPath;
@Argument(shortName="count-limit",
fullName="count-limit",
@@ -56,7 +54,7 @@ public class PrintFileDiagnostics extends CommandLineProgram {
@Override
protected void onStartup() {
super.onStartup();
- htsAnalyzer = HTSAnalyzerFactory.getFileAnalyzer(inputPath, outputFile, countLimit);
+ htsAnalyzer = HTSAnalyzerFactory.getFileAnalyzer(inputPath, outputPath, countLimit);
}
@Override
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java
index 1de153092ae..c088ff7abcd 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/BAIAnalyzer.java
@@ -11,16 +11,17 @@
*/
public class BAIAnalyzer extends HTSAnalyzer {
- public BAIAnalyzer(final GATKPath inputPath, final File outputFile) {
- super(inputPath, outputFile);
+ public BAIAnalyzer(final GATKPath inputPath, final GATKPath outputPath) {
+ super(inputPath, outputPath);
}
/**
* Run the analyzer for the file.
*/
protected void doAnalysis() {
- System.out.println(String.format("\nOutput written to %s\n", outputFile));
- BAMIndexer.createAndWriteIndex(inputPath.toPath().toFile(), outputFile, true);
+ System.out.println(String.format("\nOutput written to %s\n", outputPath));
+ // note this method is not nio aware
+ BAMIndexer.createAndWriteIndex(inputPath.toPath().toFile(), new File(outputPath.getRawInputString()), true);
}
@Override
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java
index dcbe8109938..9fb12ae9d35 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAIAnalyzer.java
@@ -5,23 +5,22 @@
import htsjdk.samtools.util.RuntimeIOException;
import org.broadinstitute.hellbender.engine.GATKPath;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
+import java.nio.file.Files;
/**
* Analyzer for CRAM (.crai) index files.
*/
public class CRAIAnalyzer extends HTSAnalyzer {
- final FileOutputStream fos;
+ final OutputStream fos;
- public CRAIAnalyzer(final GATKPath inputPath, final File outputFile) {
- super(inputPath, outputFile);
+ public CRAIAnalyzer(final GATKPath inputPath, final GATKPath outputPath) {
+ super(inputPath, outputPath);
try {
- fos = new FileOutputStream(outputFile);
+ fos = Files.newOutputStream(outputPath.toPath());
} catch (final IOException e) {
+
throw new RuntimeIOException(e);
}
}
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java
index 76933277e99..a6d473fe10a 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMAnalyzer.java
@@ -11,14 +11,11 @@
import htsjdk.samtools.util.RuntimeIOException;
import org.broadinstitute.hellbender.engine.GATKPath;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
+import java.nio.file.Files;
import java.util.Base64;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -36,13 +33,13 @@ public class CRAMAnalyzer extends HTSAnalyzer {
long coreBlocksDataSize = 0L;
long recordCount = 0;
final long countLimit;
- final FileOutputStream fos;
+ final OutputStream fos;
- public CRAMAnalyzer(final GATKPath inputPathName, final File outputFile, final long countLimit) {
- super(inputPathName, outputFile);
+ public CRAMAnalyzer(final GATKPath inputPathName, final GATKPath outputPath, final long countLimit) {
+ super(inputPathName, outputPath);
this.countLimit = countLimit;
try {
- fos = new FileOutputStream(outputFile);
+ fos = Files.newOutputStream(outputPath.toPath());
} catch (final IOException e) {
throw new RuntimeIOException(e);
}
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java
new file mode 100644
index 00000000000..366666a9eab
--- /dev/null
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/CRAMIssue8768Analyzer.java
@@ -0,0 +1,435 @@
+package org.broadinstitute.hellbender.tools.filediagnostics;
+
+import htsjdk.samtools.SAMFileHeader;
+import htsjdk.samtools.SAMRecord;
+import htsjdk.samtools.SAMSequenceDictionary;
+import htsjdk.samtools.ValidationStringency;
+import htsjdk.samtools.cram.build.CRAMReferenceRegion;
+import htsjdk.samtools.cram.build.CramIO;
+import htsjdk.samtools.cram.ref.ReferenceContext;
+import htsjdk.samtools.cram.ref.ReferenceSource;
+import htsjdk.samtools.cram.structure.*;
+import htsjdk.samtools.seekablestream.SeekablePathStream;
+import htsjdk.samtools.util.RuntimeIOException;
+import htsjdk.samtools.util.SequenceUtil;
+import htsjdk.samtools.util.Tuple;
+import org.broadinstitute.hellbender.engine.GATKPath;
+import org.broadinstitute.hellbender.utils.tsv.DataLine;
+import org.broadinstitute.hellbender.utils.tsv.TableColumnCollection;
+import org.broadinstitute.hellbender.utils.tsv.TableWriter;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.util.*;
+
+/**
+ * A diagnostic class that analyzes a CRAM input file to look for conditions that trigger issue 8768.
+ */
+public class CRAMIssue8768Analyzer extends HTSAnalyzer {
+ private final ReferenceSource referenceSource;
+ private final OutputStream outputStream;
+ private final CompressorCache compressorCache = new CompressorCache();
+ private final boolean verbose;
+ private final boolean echoToConsole;
+ private final double mismatchRateThreshold;
+ private final GATKPath tsvOutputPath;
+ private int retCode = 0;
+
+ private SAMFileHeader samHeader = null;
+
+ // everything we need to record for a bad contig
+ private record BadContig(
+ String contigName,
+ List badContainers
+ ) { }
+
+ // everything we need to record for a (good or bad) container
+ private record ContainerStats(
+ int containerOrdinal, // container ordinal # within the contig
+ boolean isBad, // true if this container is bad
+ AlignmentContext alignmentContext, // reference ID, alignment start, alignment span
+ long misMatchCount, // count of mismatched bases
+ double misMatchRate // rate of mismatched bases (mismatches/total bases)
+ ) { }
+
+ public CRAMIssue8768Analyzer(
+ final GATKPath inputPath,
+ final GATKPath textOutputPath,
+ final GATKPath tsvOutputPath,
+ final GATKPath referencePath,
+ final double mismatchRateThreshold,
+ final boolean verbose,
+ final boolean echoToConsole) {
+ super(inputPath, textOutputPath);
+ this.verbose = verbose;
+ this.echoToConsole = echoToConsole;
+ this.tsvOutputPath = tsvOutputPath;
+ this.mismatchRateThreshold = mismatchRateThreshold;
+
+ referenceSource = new ReferenceSource(referencePath.toPath());
+ try {
+ outputStream = Files.newOutputStream(this.outputPath.toPath());
+ } catch (final IOException e) {
+ throw new RuntimeIOException(e);
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (outputStream != null) {
+ outputStream.close();
+ }
+ }
+
+ public int getRetCode() {
+ return retCode;
+ }
+ protected void emitln(final String s) {
+ try {
+ outputStream.write(s.getBytes());
+ outputStream.write('\n');
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Some background:
+ *
+ * Each CRAM container has an associated htsjdk AlignmentContext that models if/how the contents of the
+ * container relates to the reference. An AlignmentContext includes a ReferenceContext, and depending on the
+ * type of the ReferenceContext, possibly an alignment start and alignment span. There are 3 possible types of
+ * ReferenceContexts:
+ *
+ * 1. SINGLE_REF: The container contains only reads that are mapped to a single reference contig, in which case
+ * the referenceID for that ReferenceContext is the contig ID for the associated contig. This is the most
+ * common case, and is the only type of ReferenceContext for which the alignment start and span are meaningful.
+ * Call isMappedSingleRef() to determine if the ReferenceContext is SINGLE_REF.
+ *
+ * Note that it is an error (the code throws) to you attempt to query a ReferenceContext for it's contig ID if
+ * the ReferenceContext is not SINGLE_REF.
+ *
+ * 2. MULTI_REF: The container contains reads that are mapped to more than one reference contig. This is an
+ * optimization used primarily when there aren't enough reads mapped to a single reference contig to justify
+ * putting the reads into a separate container. Reads in these containers are not reference compressed, and
+ * AlignmentContexts for MULTI_REF containers have no meaningful start/span values. Call isMappedMultiRef() to
+ * determine if the ReferenceContext is MULTI_REF.
+ *
+ * 3. UNMAPPED_UNPLACED: The container contains only unmapped unplaced reads. start/span are irrelevant. Call
+ * isUnmappedUnplaced() to determine if the ReferenceContext is UNMAPPED_UNPLACED.
+ */
+ public void doAnalysis() {
+ final Map badContigs = new LinkedHashMap<>(); // contig name, BadContig
+ final List goodContainers = new ArrayList<>(); // good containers, for all contigs
+ int containerOrdinalForContig = 0;
+ final int NUMBER_OF_GOOD_CONTAINERS_PER_CONTIG_TO_REPORT = 4;
+ int nGoodContainersReportedForContig = 0;
+
+ // these are HTSJDK CRAM container alignment contexts, not the GATK kind you're thinking of
+ AlignmentContext previousAlignmentContext = null;
+
+ try (final SeekablePathStream seekableStream = new SeekablePathStream(this.inputPath.toPath())) {
+ List badContainersForContig = new ArrayList<>();
+ final CramHeader cramHeader = analyzeCRAMHeader(seekableStream);
+ samHeader = Container.readSAMFileHeaderContainer(
+ cramHeader.getCRAMVersion(),
+ seekableStream,
+ inputPath.getRawInputString());
+
+ // iterate through the containers looking for ones with alignment spans that trigger the issue
+ for (boolean isEOF = false; !isEOF;) {
+ final Container container = new Container(
+ cramHeader.getCRAMVersion(),
+ seekableStream,
+ seekableStream.position());
+ containerOrdinalForContig++;
+
+ // reject CRAMs with properties that clearly indicate they were not written by GATK/Picard
+ if (isForeignCRAM(container)) {
+ return;
+ }
+
+ if (previousAlignmentContext == null) {
+ // first container in the whole file can't be bad
+ recordContainerStats(goodContainers, false, container, containerOrdinalForContig);
+ nGoodContainersReportedForContig++;
+ } else if (!previousAlignmentContext.getReferenceContext().equals(
+ container.getAlignmentContext().getReferenceContext())) {
+ // this is the first container for a new reference context; emit any bad containers accumulated
+ // for the previous reference context/contig, and reset state for the next one
+ if (badContainersForContig.size() > 0) {
+ recordContigStats(badContigs, badContainersForContig, previousAlignmentContext);
+ badContainersForContig = new ArrayList<>();
+ }
+ containerOrdinalForContig = 1;
+ // the first container for a reference context is never bad, so always add it to the good list
+ recordContainerStats(goodContainers, false, container, containerOrdinalForContig);
+ nGoodContainersReportedForContig = 1;
+ } else if (previousAlignmentContext.getReferenceContext().isMappedSingleRef() &&
+ (previousAlignmentContext.getAlignmentStart() == 1)) {
+ // we're on the same reference context as the previous container, and the previous container
+ // was mapped to position 1, so if this container is mapped, it's a candidate for bad, whether
+ // it starts at position 1 (the rare case where there is more than one bad container) or not
+ // (the common case where this is the one bad container for this contig)
+ recordContainerStats(badContainersForContig, true, container, containerOrdinalForContig);
+ } else {
+ // we're on the same reference context as the previous container, and the previous container
+ // was NOT mapped to position 1, so this container is not bad - add it to the list of good
+ // containers
+ if (verbose || nGoodContainersReportedForContig < NUMBER_OF_GOOD_CONTAINERS_PER_CONTIG_TO_REPORT) {
+ recordContainerStats(goodContainers, false,container, containerOrdinalForContig);
+ nGoodContainersReportedForContig++;
+ }
+ }
+
+ previousAlignmentContext = new AlignmentContext(
+ container.getAlignmentContext().getReferenceContext(),
+ container.getAlignmentContext().getAlignmentStart(),
+ container.getAlignmentContext().getAlignmentSpan());
+ isEOF = container.isEOF();
+ }
+ }
+ catch (IOException e) {
+ throw new RuntimeIOException(e);
+ }
+
+ retCode = printTextResults(badContigs, goodContainers);
+ if (tsvOutputPath != null) {
+ printTSVResults(badContigs, goodContainers, tsvOutputPath);
+ }
+ }
+
+ /**
+ * Display metadata for a CRAM file header.
+ */
+ private CramHeader analyzeCRAMHeader(InputStream is) {
+ final CramHeader cramHeader = CramIO.readCramHeader(is);
+ emitln("CRAM File Name: " + inputPath.toPath().getFileName());
+ emitln("CRAM Version: " + cramHeader.getCRAMVersion().toString());
+ emitln("CRAM ID Contents: " + String.format("%s", Base64.getEncoder().encodeToString(cramHeader.getId())));
+ return cramHeader;
+ }
+
+ // reject any inputs that have containers that are reference-less; have multiple slices per container;
+ // or have slices with an embedded reference, since these indicate that the file was not written by GATK/Picard.
+ // it is in theory possible that the file could have been written by some other client of htsjdk (i.e., the
+ // htsjdk tests can write such file), but analyzing such files is beyond the scope of this tool
+ private boolean isForeignCRAM(final Container container) {
+ final List slices = container.getSlices();
+ if (slices.size() > 1 ) {
+ emitln("Multi-slice container detected. This file was not written by GATK or Picard.");
+ return true;
+ } else if (container.getAlignmentContext().getReferenceContext().isMappedSingleRef() &&
+ !container.getCompressionHeader().isReferenceRequired()) {
+ emitln("Reference-less container detected. This file was not written by GATK or Picard.");
+ return true;
+ }
+ for (final Slice slice : slices) {
+ if (slice.getEmbeddedReferenceContentID() != Slice.EMBEDDED_REFERENCE_ABSENT_CONTENT_ID) {
+ emitln(String.format("Embedded reference block (ID %d) detected. This file was not written by GATK or Picard.",
+ slice.getEmbeddedReferenceContentID()));
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void recordContainerStats(
+ final List targetList,
+ final boolean isBad,
+ final Container container,
+ final int containerOrdinal) {
+ // don't even try to compute stats for unmapped-unplaced containers or multi-ref containers
+ if (container.getAlignmentContext().getReferenceContext().isMappedSingleRef()) {
+ final Tuple containerStats = analyzeContainerBaseMismatches(container);
+ targetList.add(new ContainerStats(
+ containerOrdinal,
+ isBad,
+ container.getAlignmentContext(),
+ containerStats.a, // mismatches
+ containerStats.b)); // mismatchPercent
+ }
+ }
+
+ private void recordContigStats(
+ final Map badContigs,
+ final List badContainers,
+ final AlignmentContext previousAlignmentContext) {
+ if (null != badContigs.putIfAbsent(
+ previousAlignmentContext.getReferenceContext().toString(),
+ new BadContig(
+ previousAlignmentContext.getReferenceContext().toString(),
+ badContainers))) {
+ throw new IllegalStateException(
+ String.format(
+ "Attempt to add a bad contig (%s) more than once",
+ previousAlignmentContext.getReferenceContext().toString()));
+ }
+ }
+
+ /**
+ * Analyze base mismatches CRAM file container.
+ * return true if container is EOF container
+ */
+ private Tuple analyzeContainerBaseMismatches(final Container container) {
+ final SAMSequenceDictionary sequenceDictionary = samHeader.getSequenceDictionary();
+ final List actualSAMRecords = container.getSAMRecords(
+ ValidationStringency.LENIENT,
+ new CRAMReferenceRegion(referenceSource, samHeader.getSequenceDictionary()),
+ compressorCache,
+ samHeader);
+
+ final CRAMReferenceRegion localReferenceRegion = new CRAMReferenceRegion(referenceSource, sequenceDictionary);
+ // SequenceUtil.countMismatches wants the full contig's reference bases
+ localReferenceRegion.fetchReferenceBases(container.getAlignmentContext().getReferenceContext().getReferenceContextID());
+ final byte referenceBases[] = localReferenceRegion.getCurrentReferenceBases();
+
+ long totalBases = 0;
+ long misMatches = 0;
+ for (SAMRecord samRec : actualSAMRecords) {
+ totalBases += (long) samRec.getReadLength();
+ misMatches += (long) SequenceUtil.countMismatches(samRec, referenceBases);
+ }
+ return new Tuple<>(totalBases, misMatches/(double) totalBases);
+ }
+
+ private int printTextResults(final Map badContigs, final List goodContainers) {
+ int retCode;
+ if (badContigs.isEmpty()) {
+ final String NO_CORRUPT_CONTAINERS = "\n**********************NO CORRUPT CONTAINERS DETECTED**********************";
+ emitln(NO_CORRUPT_CONTAINERS);
+ // always emit the results summary to console
+ System.out.println(NO_CORRUPT_CONTAINERS);
+ retCode = 0;
+ } else {
+ final String POSSIBLE_CORRUPT_CONTAINERS = "\n**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:\n";
+ emitln(POSSIBLE_CORRUPT_CONTAINERS);
+ // always emit the results summary to console
+ System.out.println(POSSIBLE_CORRUPT_CONTAINERS);
+ retCode = 1;
+ }
+
+ // before we print out the containers, print out the stats for both the good and the bad containers
+ final int totalGoodContainers = goodContainers.size();
+ final double sumOfGoodMismatchRates = goodContainers.stream().mapToDouble(c -> c.misMatchRate).sum();
+ final double averageGoodMismatchRate = sumOfGoodMismatchRates / totalGoodContainers;
+ final String avgGoodMismatchStr = String.format("Average mismatch rate for presumed good containers: %f", averageGoodMismatchRate);
+ emitln(avgGoodMismatchStr);
+ if (echoToConsole) {
+ System.out.println(avgGoodMismatchStr);
+ }
+
+ if (!badContigs.isEmpty()) {
+ final int totalBadContainers = badContigs.values().stream().mapToInt(bc -> bc.badContainers().size()).sum();
+ final double sumOfBadMismatchRates = badContigs.values().stream().mapToDouble(
+ bc -> bc.badContainers().stream().mapToDouble(c -> c.misMatchRate).sum()).sum();
+ final double averageBadMismatchRate = sumOfBadMismatchRates / totalBadContainers;
+ final String avgBadMismatchStr = String.format("Average mismatch rate for suspected bad containers: %f", averageBadMismatchRate);
+ emitln(avgBadMismatchStr);
+ if (echoToConsole) {
+ System.out.println(avgBadMismatchStr);
+ }
+
+ if (averageBadMismatchRate > mismatchRateThreshold) {
+ final String exceedThresholdStr = String.format(
+ "The average base mismatch rate of %f for suspected bad containers exceeds the threshold rate of %1.2f, and indicates this file may be corrupt.",
+ averageBadMismatchRate,
+ mismatchRateThreshold);
+ emitln(exceedThresholdStr);
+ if (echoToConsole) {
+ System.out.println(exceedThresholdStr);
+ }
+ }
+
+ // now emit the list of corrupt containers for each bad contig
+ emitln("\nSuspected CORRUPT Containers:");
+ for (final Map.Entry entry : badContigs.entrySet()) {
+ for (final ContainerStats badContainer : entry.getValue().badContainers()) {
+ final String badStatStr = String.format(" Ordinal: %d (%s) Mismatch Rate/Count: %f/%d",
+ badContainer.containerOrdinal,
+ badContainer.alignmentContext.toString(),
+ badContainer.misMatchRate,
+ badContainer.misMatchCount);
+ emitln(badStatStr);
+ if (echoToConsole) {
+ System.out.println(badStatStr);
+ }
+ }
+ }
+ }
+
+ emitln("\nPresumed GOOD Containers:");
+ int lastContig = ReferenceContext.UNINITIALIZED_REFERENCE_ID;
+ for (final ContainerStats goodContainer : goodContainers) {
+ if (lastContig != ReferenceContext.UNINITIALIZED_REFERENCE_ID &&
+ lastContig != goodContainer.alignmentContext.getReferenceContext().getReferenceContextID()) {
+ emitln("");
+ if (echoToConsole) {
+ System.out.println("");
+ }
+ }
+ lastContig = goodContainer.alignmentContext.getReferenceContext().getReferenceContextID();
+ final String goodDetailStr = String.format(" Ordinal: %d (%s) Mismatch Rate/Count: %f/%d",
+ goodContainer.containerOrdinal,
+ goodContainer.alignmentContext.toString(),
+ goodContainer.misMatchRate,
+ goodContainer.misMatchCount);
+ emitln(goodDetailStr);
+ if (echoToConsole) {
+ System.out.println(goodDetailStr);
+ }
+ }
+ return retCode;
+ }
+
+ // write the results out to a machine-readable tsv file
+ private void printTSVResults(
+ final Map badContigs,
+ final List goodContainers,
+ final GATKPath tsvOutputPath) {
+ // File name, contig name, container ordinal, good or bad, mismatch rate
+ final TableColumnCollection columnNames = new TableColumnCollection(
+ "file_name", // file name
+ "contig_name", // contig name
+ "container_ordinal", // container ordinal
+ "container_is_bad", // good or bad, 1 or 0
+ "mismatch_rate", // mismatch rate (double)
+ "alignment_start", // alignment start (int)
+ "alignment_span" // alignment span (int)
+ );
+
+ try (final TableWriter tsvWriter = new TableWriter<>(tsvOutputPath.toPath(), columnNames) {
+ @Override
+ protected void composeLine(final ContainerStats containerStats, final DataLine dataLine) {
+ dataLine.set("file_name", inputPath.toPath().getFileName().toString())
+ .set("contig_name", samHeader.getSequenceDictionary().getSequence(containerStats.alignmentContext.getReferenceContext().getReferenceContextID()).getSequenceName())
+ .set("container_ordinal", containerStats.containerOrdinal)
+ .set("container_is_bad", containerStats.isBad ? 1 : 0)
+ .set("mismatch_rate", containerStats.misMatchRate)
+ .set("alignment_start", containerStats.alignmentContext.getAlignmentStart())
+ .set("alignment_span", containerStats.alignmentContext.getAlignmentSpan());
+ }
+ })
+ {
+ tsvWriter.writeHeaderIfApplies();
+ if (badContigs.isEmpty()) {
+ tsvWriter.writeComment("No bad containers detected");
+ } else {
+ tsvWriter.writeComment("Bad containers:");
+ for (final Map.Entry entry : badContigs.entrySet()) {
+ tsvWriter.writeAllRecords(entry.getValue().badContainers());
+ }
+ }
+ if (goodContainers.isEmpty()) {
+ tsvWriter.writeComment("No good mapped containers detected");
+ } else {
+ tsvWriter.writeComment("Good containers:");
+ tsvWriter.writeAllRecords(goodContainers);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java
index 8339dfaccc4..8a0145b9307 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzer.java
@@ -4,7 +4,6 @@
import org.broadinstitute.hellbender.engine.GATKPath;
import java.io.Closeable;
-import java.io.File;
import java.io.IOException;
/**
@@ -13,11 +12,11 @@
public abstract class HTSAnalyzer implements Closeable {
protected GATKPath inputPath;
- protected File outputFile;
+ protected GATKPath outputPath;
- public HTSAnalyzer(final GATKPath filePath, final File outputFile) {
+ public HTSAnalyzer(final GATKPath filePath, final GATKPath outputPath) {
this.inputPath = filePath;
- this.outputFile = outputFile;
+ this.outputPath = outputPath;
}
/**
diff --git a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java
index d58438a7b61..b987a72cb37 100644
--- a/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java
+++ b/src/main/java/org/broadinstitute/hellbender/tools/filediagnostics/HTSAnalyzerFactory.java
@@ -3,21 +3,19 @@
import htsjdk.samtools.util.FileExtensions;
import org.broadinstitute.hellbender.engine.GATKPath;
-import java.io.File;
-
/**
* Class for creating an analyzer based on an alignment file type.
*/
public class HTSAnalyzerFactory {
- public static HTSAnalyzer getFileAnalyzer(final GATKPath inputPath, final File outputFile, final long countLimit) {
+ public static HTSAnalyzer getFileAnalyzer(final GATKPath inputPath, final GATKPath outputPath, final long countLimit) {
System.out.println(inputPath.getRawInputString());
if (inputPath.isCram()) {
- return new CRAMAnalyzer(inputPath, outputFile, countLimit);
+ return new CRAMAnalyzer(inputPath, outputPath, countLimit);
} else if (inputPath.hasExtension(FileExtensions.CRAM_INDEX)) {
- return new CRAIAnalyzer(inputPath, outputFile);
+ return new CRAIAnalyzer(inputPath, outputPath);
} else if (inputPath.hasExtension(FileExtensions.BAI_INDEX)) {
- return new BAIAnalyzer(inputPath, outputFile);
+ return new BAIAnalyzer(inputPath, outputPath);
} else {
throw new RuntimeException("Unsupported diagnostic file type: " + inputPath.getRawInputString());
}
diff --git a/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java b/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java
new file mode 100644
index 00000000000..e6ac34b8cdf
--- /dev/null
+++ b/src/test/java/org/broadinstitute/hellbender/tools/CRAMIssue8768DetectorIntegrationTest.java
@@ -0,0 +1,125 @@
+package org.broadinstitute.hellbender.tools;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.broadinstitute.hellbender.CommandLineProgramTest;
+import org.broadinstitute.hellbender.testutils.ArgumentsBuilder;
+import org.broadinstitute.hellbender.testutils.IntegrationTestSpec;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+public class CRAMIssue8768DetectorIntegrationTest extends CommandLineProgramTest {
+
+ @DataProvider(name = "cramAnalysisTestCases")
+ public Object[][] getFileDiagnosticsTestCases() {
+ return new Object[][]{
+ // local file tests
+ {
+ // test file created by rewriting the htsjdk test file
+ // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram, using a version
+ // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768. the rewrite causes
+ // the file to have corrupt read bases, so we can use it to test the detector
+ // 1 bad container
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram",
+ "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa",
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")),
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt",
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv",
+ },
+ {
+ // test file created by rewriting the htsjdk test file
+ // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram, using a version
+ // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768. the rewrite causes
+ // the file to have corrupt read bases, so we can use it to test the detector
+ // 1 bad container
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram",
+ "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa",
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "true")),
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt",
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv",
+ },
+ {
+ // 0 bad containers
+ NA12878_20_21_WGS_cram,
+ b37_reference_20_21,
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")),
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt",
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv",
+ },
+ {
+ // 0 bad containers
+ NA12878_20_21_WGS_cram,
+ b37_reference_20_21,
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "true")),
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt",
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv",
+ },
+ {
+ // test file created by rewriting the htsjdk test file
+ // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram using a version
+ // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768, along with code
+ // to force the file to have 2 bad containers by forcing numerous reads to be aligned to
+ // position 1.
+ // 2 bad containers
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram",
+ "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa",
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")),
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt",
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv",
+ },
+ {
+ // test file created by rewriting the htsjdk test file
+ // src/test/resources/htsjdk/samtools/cram/mitoAlignmentStartTest.cram using a version
+ // of GATK that has bug https://github.com/broadinstitute/gatk/issues/8768, along with code
+ // to force the file to have 2 bad containers by forcing numerous reads to be aligned to
+ // position 1.
+ // 3 bad containers
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram",
+ "src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa",
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")),
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt",
+ "src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv",
+ },
+ // cloud file test
+ {
+ // 0 bad containers
+ "gs://hellbender/test/resources/large/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram",
+ "gs://hellbender/test/resources/large/human_g1k_v37.20.21.fasta",
+ List.of(Pair.of(CRAMIssue8768Detector.VERBOSE_ARG_NAME, "false")),
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt",
+ "src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv",
+ },
+ };
+ }
+
+ @Test(dataProvider = "cramAnalysisTestCases", groups={"cloud"})
+ public void testCramAnalysis(
+ final String inputPath,
+ final String referencePath, // unused for now
+ final List> extraArgs,
+ final String expectedTextOutputPath,
+ final String expectedTSVOutputPath) throws IOException {
+ final File outTextFile = createTempFile("testFileDiagnostics", ".txt");
+ final File outTSVFile = expectedTSVOutputPath == null ? null : createTempFile("testFileDiagnostics", ".tsv");
+ ArgumentsBuilder argBuilder = new ArgumentsBuilder();
+ argBuilder.addInput(inputPath);
+ argBuilder.addOutput(outTextFile);
+ argBuilder.addReference(referencePath);
+ if (outTSVFile != null) {
+ argBuilder.add(CRAMIssue8768Detector.OUTPUT_TSV__ARG_NAME, outTSVFile.getAbsolutePath());
+ }
+ if (extraArgs != null) {
+ extraArgs.forEach(argPair -> argBuilder.add(argPair.getKey(), argPair.getValue()));
+ }
+ runCommandLine(argBuilder.getArgsList());
+
+ IntegrationTestSpec.assertEqualTextFiles(outTextFile, new File(expectedTextOutputPath));
+ if (outTSVFile != null) {
+ IntegrationTestSpec.assertEqualTextFiles(outTSVFile, new File(expectedTSVOutputPath));
+ }
+ }
+
+}
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv
new file mode 100644
index 00000000000..5155b23ec65
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.tsv
@@ -0,0 +1,11 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#No bad containers detected
+#Good containers:
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt
new file mode 100644
index 00000000000..0c9b47663d6
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.cloud.txt
@@ -0,0 +1,17 @@
+CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram
+CRAM Version: 2.1
+CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA=
+
+**********************NO CORRUPT CONTAINERS DETECTED**********************
+Average mismatch rate for presumed good containers: 0.005615
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000
+
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv
new file mode 100644
index 00000000000..5155b23ec65
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.tsv
@@ -0,0 +1,11 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#No bad containers detected
+#Good containers:
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt
new file mode 100644
index 00000000000..0c9b47663d6
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.false.bug8768.txt
@@ -0,0 +1,17 @@
+CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram
+CRAM Version: 2.1
+CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA=
+
+**********************NO CORRUPT CONTAINERS DETECTED**********************
+Average mismatch rate for presumed good containers: 0.005615
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000
+
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv
new file mode 100644
index 00000000000..ac064bf09bf
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.tsv
@@ -0,0 +1,64 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#No bad containers detected
+#Good containers:
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 1 0 0.0066287128712871285 9999902 11055
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 2 0 0.0032158415841584157 10010859 11595
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 3 0 0.0028702970297029705 10022353 10302
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 4 0 0.0028138613861386137 10032556 10955
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 5 0 0.0026405940594059407 10043410 11007
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 6 0 0.0023297029702970297 10054316 11415
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 7 0 0.004123762376237624 10065630 11707
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 8 0 0.0029712871287128715 10077236 10857
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 9 0 0.004207920792079208 10087992 12022
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 10 0 0.004023762376237624 10099914 11455
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 11 0 0.0033594059405940594 10111269 11677
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 12 0 0.0032445544554455447 10122847 11517
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 13 0 0.0025287128712871286 10134264 10812
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 14 0 0.0028118811881188118 10144976 11737
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 15 0 0.0027811881188118813 10156616 11103
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 16 0 0.003216831683168317 10167620 10903
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 17 0 0.0033316831683168316 10178422 10654
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 18 0 0.0028544554455445545 10188975 12280
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 19 0 0.002307920792079208 10201162 10498
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 20 0 0.0033574257425742575 10211560 11415
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 21 0 0.002822772277227723 10222875 10825
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 22 0 0.003494059405940594 10233602 11012
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 20 23 0 0.003443653463400968 10244514 5587
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 1 0 0.007091089108910891 9999901 5725
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 2 0 0.008675247524752475 10005525 4771
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 3 0 0.006677227722772277 10010195 6694
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 4 0 0.006946534653465347 10016789 6937
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 5 0 0.0074524752475247525 10023629 6933
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 6 0 0.009954455445544555 10030464 54819
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 7 0 0.027154455445544554 10085182 1209
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 8 0 0.010437623762376237 10086291 1849
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 9 0 0.007101980198019802 10088040 4846
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 10 0 0.0076544554455445545 10092786 5025
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 11 0 0.007856435643564356 10097710 4565
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 12 0 0.008387128712871287 10102174 5112
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 13 0 0.008465346534653466 10107185 4822
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 14 0 0.006217821782178218 10111906 4648
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 15 0 0.006370297029702971 10116453 5595
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 16 0 0.006818811881188119 10121948 4596
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 17 0 0.007886138613861386 10126444 4699
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 18 0 0.008905940594059405 10131043 4025
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 19 0 0.009242574257425742 10134967 3486
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 20 0 0.008777227722772278 10138352 2580
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 21 0 0.009877227722772277 10140831 2362
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 22 0 0.007791089108910891 10143092 3693
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 23 0 0.008422772277227722 10146684 3779
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 24 0 0.008382178217821782 10150362 3205
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 25 0 0.005921782178217822 10153467 4029
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 26 0 0.006862376237623763 10157395 3564
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 27 0 0.006395049504950495 10160858 3833
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 28 0 0.00555049504950495 10164591 4631
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 29 0 0.004498019801980198 10169122 5087
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 30 0 0.00440990099009901 10174110 5846
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 31 0 0.0058465346534653465 10179857 5196
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 32 0 0.005392079207920792 10184953 3979
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 33 0 0.005116831683168317 10188831 5765
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 34 0 0.005946534653465347 10194495 3216
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 35 0 0.0058 10197610 4759
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 36 0 0.00514950495049505 10202269 3867
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 37 0 0.004726732673267326 10206036 4706
+CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram 21 38 0 0.004119086417621911 10210641 5332
diff --git a/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt
new file mode 100644
index 00000000000..29f906bc803
--- /dev/null
+++ b/src/test/resources/filediagnostics/CEUTrio.HiSeq.WGS.b37.NA12878.20.21.true.bug8768.txt
@@ -0,0 +1,70 @@
+CRAM File Name: CEUTrio.HiSeq.WGS.b37.NA12878.20.21.cram
+CRAM Version: 2.1
+CRAM ID Contents: L1VzZXJzL2FraWV6dW4vSWRlYVA=
+
+**********************NO CORRUPT CONTAINERS DETECTED**********************
+Average mismatch rate for presumed good containers: 0.005962
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=9999902, span=11055) Mismatch Rate/Count: 0.006629/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=10010859, span=11595) Mismatch Rate/Count: 0.003216/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=10022353, span=10302) Mismatch Rate/Count: 0.002870/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=10032556, span=10955) Mismatch Rate/Count: 0.002814/1010000
+ Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 0, start=10043410, span=11007) Mismatch Rate/Count: 0.002641/1010000
+ Ordinal: 6 (sequenceId=SINGLE_REFERENCE: 0, start=10054316, span=11415) Mismatch Rate/Count: 0.002330/1010000
+ Ordinal: 7 (sequenceId=SINGLE_REFERENCE: 0, start=10065630, span=11707) Mismatch Rate/Count: 0.004124/1010000
+ Ordinal: 8 (sequenceId=SINGLE_REFERENCE: 0, start=10077236, span=10857) Mismatch Rate/Count: 0.002971/1010000
+ Ordinal: 9 (sequenceId=SINGLE_REFERENCE: 0, start=10087992, span=12022) Mismatch Rate/Count: 0.004208/1010000
+ Ordinal: 10 (sequenceId=SINGLE_REFERENCE: 0, start=10099914, span=11455) Mismatch Rate/Count: 0.004024/1010000
+ Ordinal: 11 (sequenceId=SINGLE_REFERENCE: 0, start=10111269, span=11677) Mismatch Rate/Count: 0.003359/1010000
+ Ordinal: 12 (sequenceId=SINGLE_REFERENCE: 0, start=10122847, span=11517) Mismatch Rate/Count: 0.003245/1010000
+ Ordinal: 13 (sequenceId=SINGLE_REFERENCE: 0, start=10134264, span=10812) Mismatch Rate/Count: 0.002529/1010000
+ Ordinal: 14 (sequenceId=SINGLE_REFERENCE: 0, start=10144976, span=11737) Mismatch Rate/Count: 0.002812/1010000
+ Ordinal: 15 (sequenceId=SINGLE_REFERENCE: 0, start=10156616, span=11103) Mismatch Rate/Count: 0.002781/1010000
+ Ordinal: 16 (sequenceId=SINGLE_REFERENCE: 0, start=10167620, span=10903) Mismatch Rate/Count: 0.003217/1010000
+ Ordinal: 17 (sequenceId=SINGLE_REFERENCE: 0, start=10178422, span=10654) Mismatch Rate/Count: 0.003332/1010000
+ Ordinal: 18 (sequenceId=SINGLE_REFERENCE: 0, start=10188975, span=12280) Mismatch Rate/Count: 0.002854/1010000
+ Ordinal: 19 (sequenceId=SINGLE_REFERENCE: 0, start=10201162, span=10498) Mismatch Rate/Count: 0.002308/1010000
+ Ordinal: 20 (sequenceId=SINGLE_REFERENCE: 0, start=10211560, span=11415) Mismatch Rate/Count: 0.003357/1010000
+ Ordinal: 21 (sequenceId=SINGLE_REFERENCE: 0, start=10222875, span=10825) Mismatch Rate/Count: 0.002823/1010000
+ Ordinal: 22 (sequenceId=SINGLE_REFERENCE: 0, start=10233602, span=11012) Mismatch Rate/Count: 0.003494/1010000
+ Ordinal: 23 (sequenceId=SINGLE_REFERENCE: 0, start=10244514, span=5587) Mismatch Rate/Count: 0.003444/513989
+
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 1, start=9999901, span=5725) Mismatch Rate/Count: 0.007091/1010000
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 1, start=10005525, span=4771) Mismatch Rate/Count: 0.008675/1010000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 1, start=10010195, span=6694) Mismatch Rate/Count: 0.006677/1010000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 1, start=10016789, span=6937) Mismatch Rate/Count: 0.006947/1010000
+ Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 1, start=10023629, span=6933) Mismatch Rate/Count: 0.007452/1010000
+ Ordinal: 6 (sequenceId=SINGLE_REFERENCE: 1, start=10030464, span=54819) Mismatch Rate/Count: 0.009954/1010000
+ Ordinal: 7 (sequenceId=SINGLE_REFERENCE: 1, start=10085182, span=1209) Mismatch Rate/Count: 0.027154/1010000
+ Ordinal: 8 (sequenceId=SINGLE_REFERENCE: 1, start=10086291, span=1849) Mismatch Rate/Count: 0.010438/1010000
+ Ordinal: 9 (sequenceId=SINGLE_REFERENCE: 1, start=10088040, span=4846) Mismatch Rate/Count: 0.007102/1010000
+ Ordinal: 10 (sequenceId=SINGLE_REFERENCE: 1, start=10092786, span=5025) Mismatch Rate/Count: 0.007654/1010000
+ Ordinal: 11 (sequenceId=SINGLE_REFERENCE: 1, start=10097710, span=4565) Mismatch Rate/Count: 0.007856/1010000
+ Ordinal: 12 (sequenceId=SINGLE_REFERENCE: 1, start=10102174, span=5112) Mismatch Rate/Count: 0.008387/1010000
+ Ordinal: 13 (sequenceId=SINGLE_REFERENCE: 1, start=10107185, span=4822) Mismatch Rate/Count: 0.008465/1010000
+ Ordinal: 14 (sequenceId=SINGLE_REFERENCE: 1, start=10111906, span=4648) Mismatch Rate/Count: 0.006218/1010000
+ Ordinal: 15 (sequenceId=SINGLE_REFERENCE: 1, start=10116453, span=5595) Mismatch Rate/Count: 0.006370/1010000
+ Ordinal: 16 (sequenceId=SINGLE_REFERENCE: 1, start=10121948, span=4596) Mismatch Rate/Count: 0.006819/1010000
+ Ordinal: 17 (sequenceId=SINGLE_REFERENCE: 1, start=10126444, span=4699) Mismatch Rate/Count: 0.007886/1010000
+ Ordinal: 18 (sequenceId=SINGLE_REFERENCE: 1, start=10131043, span=4025) Mismatch Rate/Count: 0.008906/1010000
+ Ordinal: 19 (sequenceId=SINGLE_REFERENCE: 1, start=10134967, span=3486) Mismatch Rate/Count: 0.009243/1010000
+ Ordinal: 20 (sequenceId=SINGLE_REFERENCE: 1, start=10138352, span=2580) Mismatch Rate/Count: 0.008777/1010000
+ Ordinal: 21 (sequenceId=SINGLE_REFERENCE: 1, start=10140831, span=2362) Mismatch Rate/Count: 0.009877/1010000
+ Ordinal: 22 (sequenceId=SINGLE_REFERENCE: 1, start=10143092, span=3693) Mismatch Rate/Count: 0.007791/1010000
+ Ordinal: 23 (sequenceId=SINGLE_REFERENCE: 1, start=10146684, span=3779) Mismatch Rate/Count: 0.008423/1010000
+ Ordinal: 24 (sequenceId=SINGLE_REFERENCE: 1, start=10150362, span=3205) Mismatch Rate/Count: 0.008382/1010000
+ Ordinal: 25 (sequenceId=SINGLE_REFERENCE: 1, start=10153467, span=4029) Mismatch Rate/Count: 0.005922/1010000
+ Ordinal: 26 (sequenceId=SINGLE_REFERENCE: 1, start=10157395, span=3564) Mismatch Rate/Count: 0.006862/1010000
+ Ordinal: 27 (sequenceId=SINGLE_REFERENCE: 1, start=10160858, span=3833) Mismatch Rate/Count: 0.006395/1010000
+ Ordinal: 28 (sequenceId=SINGLE_REFERENCE: 1, start=10164591, span=4631) Mismatch Rate/Count: 0.005550/1010000
+ Ordinal: 29 (sequenceId=SINGLE_REFERENCE: 1, start=10169122, span=5087) Mismatch Rate/Count: 0.004498/1010000
+ Ordinal: 30 (sequenceId=SINGLE_REFERENCE: 1, start=10174110, span=5846) Mismatch Rate/Count: 0.004410/1010000
+ Ordinal: 31 (sequenceId=SINGLE_REFERENCE: 1, start=10179857, span=5196) Mismatch Rate/Count: 0.005847/1010000
+ Ordinal: 32 (sequenceId=SINGLE_REFERENCE: 1, start=10184953, span=3979) Mismatch Rate/Count: 0.005392/1010000
+ Ordinal: 33 (sequenceId=SINGLE_REFERENCE: 1, start=10188831, span=5765) Mismatch Rate/Count: 0.005117/1010000
+ Ordinal: 34 (sequenceId=SINGLE_REFERENCE: 1, start=10194495, span=3216) Mismatch Rate/Count: 0.005947/1010000
+ Ordinal: 35 (sequenceId=SINGLE_REFERENCE: 1, start=10197610, span=4759) Mismatch Rate/Count: 0.005800/1010000
+ Ordinal: 36 (sequenceId=SINGLE_REFERENCE: 1, start=10202269, span=3867) Mismatch Rate/Count: 0.005150/1010000
+ Ordinal: 37 (sequenceId=SINGLE_REFERENCE: 1, start=10206036, span=4706) Mismatch Rate/Count: 0.004727/1010000
+ Ordinal: 38 (sequenceId=SINGLE_REFERENCE: 1, start=10210641, span=5332) Mismatch Rate/Count: 0.004119/961621
diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict
new file mode 100644
index 00000000000..095804921f9
--- /dev/null
+++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.dict
@@ -0,0 +1,2 @@
+@HD VN:1.0 SO:unsorted
+@SQ SN:Mito LN:85779 M5:71c39cf065b8d574f636b654c274cf1b UR:file:///Users/cnorman/projects/htsjdk/testdata/htsjdk_test.fa
diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa
new file mode 100644
index 00000000000..8608c871beb
--- /dev/null
+++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa
@@ -0,0 +1,1431 @@
+>Mito dna:chromosome chromosome:EF4:Mito:1:85779:1 REF
+ttcataattaattttttatatatatattatattataatattaatttatattataaaaata
+atatttattattaaaatatttattctcctttcggggttccggctcccgtggccgggcccc
+ggaattattaattaataataaattattattaataattatttattattttatcattaaaat
+atataaataaaaaatattaaaaagataaaaaaaataatgtttattctttatataaattat
+atatatatatataattaattaattaattaattaattaataataaaaatataattataaat
+aatataaatattattctttattaataaatatatatttatatattataaaagtatcttaat
+taataaaaataaacatttaataatatgaattatatattattattattattaataaaatta
+ttaataataatcaatatgaaattaataaaaatcttataaaaaagtaatgaatactccttt
+ttaaaaataaaaaggggttcggtccccccccttccgtatacttacgggaggggggtccct
+cactccttcttaattaaattatcttaattaaattatcttaattaaattatcttaattaaa
+ttatcttaattaaattatcttaattaaattaaaaggggactttatatttataaagtaatt
+atattattattattattattatttatttattttatttttattattttattatatatatta
+tatattaatacagatagaagccaaaaggtcaggcgctttctttgggagaaagacctagtt
+agttcgagtctatcctatctgataataatttaattaaccattaaaaaaaagtatatatat
+ttatcataatatattaaattttattacattacaaatgaacacttttatttatatttataa
+aaatatgaactccttcggggtccgccccgcgggggcgggccggactccatattattatta
+ttataattattattataattattattataattattattataattattattataattaaag
+agttttggataccaatatgatataatatgatataggaccgaaacccctcattttatcatt
+tatttataatattataaataaaaaaaaatattatatattataataaaattaatatcataa
+tatattatattatatattatattatatatatatatatatatattcttttataaaatttat
+attcttcttattaaaattaaaaagggagcggacttttaattatatttaattatagttttt
+aatcattggttgagatttcaaaataaggtataatatttatattattctttaacaaatatt
+atattataaaaaaagatataatatttatattattctttaacaaatattatattataaaaa
+agatataatatttatatattattattaatattatttttaagttccgaaaggagaaactta
+taatttttatatcattatttattattatttttaatttcaactccttttaggtatttccat
+ttaactttcagcagagactttctaattataattatatatatataaatttaaatacattta
+taaaaaagtatataatataattatattatatataataatattattaaatgaagtattctt
+tattattaattataggatatctggggtccattaataattattattgtaaataataataag
+gaccccccccattatctaattaataaatatataaataatcattaataaatatattaataa
+ttattaataaatatataaataatcattaataaatatataaataatataatatattataaa
+aatataataataataatttattattaaaatataataatttattataaaaatataataatt
+tattataaaaatataataataactcctttcggggttcacacctttataaataataaataa
+taaataataaataataaataataaatattagtattcactaatataaaataataattataa
+aaataatcattattaaaaatattattaattattaaattaaatacaattaatataatttag
+ttgtttatataattttaaataatgtttatatcaatttaataaaattaaatttatagttcc
+ggggcccggccacgggagccggaaccccgaaaggagtttatctatatattataataacta
+tatgaatttaattattaaaaataataaaaataaggaattttaataagaagtaatatttat
+tatataatatataaaaaaaatatatatatatatataaaaatatatataataagttttatt
+ataatatatattaaattaattattatgaggggttcggtccctttccgggccccaattcat
+ctcatctcattttatttcatttcaatatcatctaatctcatttctttatagattttacat
+atatataaatataaatataagatattcacatttatatataatataatataatataataga
+tattcattcctctttgattaaactaataattaataattaataattaataattaataatta
+ataattattcagtagaactccttcttaaaaaggggttcggtccccctcccattagtatag
+tatagggaggggtccctcactccttcggggtccgccccgcagggggcgggccggactatt
+attaaataatttataatttattatttattaatatatttatataatataatataatataat
+attattcatactttttattaatataatataatataatattattaatactttctcctttcg
+gggttccggctcccgtggccgggccccggaactattaatataaagaaaagagtttcaatt
+atttatttatttatttattttttataaaaataagtccccgccccggcggggaccccgaag
+gagtattaatttaaataatttatttaatgaaattattaattataaataaaaataataatt
+tttaaagatgtaatataaaaataaatataatataatttaggataattatataaaatattt
+attatatatagtttttataaagagttttaaaagtgataatataatatataatatttataa
+gttccggggcccggccacgggagccggaaccccgaaaggagttatttatatatatataat
+tataatcttattaattatttatatatatatttaatattatttttatataattttatatta
+aagtattataattatatatttaatattatttttatataattttatattatttatttattt
+atttatttatttaaaaatattataatcatatatttaatattatttaatatattttatata
+ttatatcttttattgatttatatatatatagatttaataaatatatatatatatatatat
+ataaatattcattatatatttattattattattattatttattactattttttattatat
+attaataatatatatattattagttatgggtatcctaatagtatattattatttttaata
+ataatttatgatttatgtataataaataagtagggaatcggtacgaatatcgaaaggagt
+tatatattattaattatttataattattttatatattattaattatttataattatttta
+tatatttataattattttatatagataggttagataggatagatagtatagataggggtc
+ccatttattatttacaataataattattaatgggacccggatatcttattgttattaatt
+tatatattattcattattattaatatatatttaatataattaaatattatattatattat
+attatattatttattaaaaaaaaatctattacttattttttttattaatatataaattat
+ttatataatttatcatttttatttatatattattattttttatatataaattaatatata
+tatatattatatatacttttttttttataatatatctatatatataaataaatatattat
+attatatttttatataatatattattaattattattttaattttctattctattgtgggg
+gtcccaattattattttcaataataattattattgggacccggatatcttcttgtttatc
+atttattattttattaaatttattattatttttaatttatatttatattatataattaat
+tatatcgtttatactccttcggggtccccgccggggcggggactttatattttattatat
+aatatattatattcttataatatatttattgattatgttataaaatttattctatgtgtg
+ctctatatatatttaatattctggttattatcacccaccccctccccctattacgtctcc
+gaggtcccggtttcgtaagaaaccgggacttatatatttataaatataaatctaacttaa
+ttaataatttaaataatatactttatattttataaataaaaataattataacctttttta
+taattatatataataataatatatattatcaaataattattatttcttttttttctttaa
+ttaattaattaattaatattttataaaaatatatttctccttacggggttccggctcccg
+tagccggggcccgaaactaaataaaatatattattaataatattatataatataataata
+atataataattttatataaatatatatttatatattaaattaaattataattttattatg
+aaaattatatcttttttttatatttttatataataaaaatatgttatatatatattaata
+ataaaaggtagtgaggattaaataaattatataataattataactcttaattataaaata
+aatatatatatatatataagtatccatttccatataatcttttaataaatattaataaat
+attaaaaaaaaataatattataatattttagtatataattcaataaaattcattggaggg
+gtaaataataataatttactaatggcaagttatagtcttaaaggtttttattttttttat
+taaattaataaaataataataccatttatatattccattatatatatatatttaataaaa
+ataataatatcatttatatattttattatatattatatatattttatataaaataataat
+aataaatttatatttttatatattattattaaataataataatataaataactccttcgg
+ggttcggtccccacgggtccctcactccttcttaagaataaaaaggggttcggtccccct
+cccgttagtacacgggagggggtctctcactccttcttaaaaaataaaaaggtggaagga
+ctaatataattttaaataataattaatactttaataataatttgtatttctttattatta
+atatattaaatataataataattaatataattacaatatattaatattatcaaatattaa
+taaatatacttttttatataatttatttatttatttattttttttttattaaactaatta
+taattgtaatttcgaaaagggggtgggagtaaacatatataatttataatctatatatat
+atatatataattttttaataaatattaataaatatttataaaaagaataatttatattta
+taatatataatttatatattttatttttattatacaattaatataaaatataaaatatta
+aatattaaatattaaatattaaatattaaatattaatttttataggggttatataataat
+tatatttataattatataatattaaaaagggtatttttataattattacatttttatttt
+atttataaaaatattaattttaataagtattgaatactttatataatataaatattaatt
+acataattaataattaaataatatttaataatattatttaaatttattatttataattat
+ttatttataaaattctatttttattattattatttttattttattattaaagattaatat
+aataattattaatatattaaaaatcttttattatattaatatttataaaaaagtatttaa
+taaaaaagatgtataaatttataaattatataatattattaatttatataataataatat
+tataactttgtgattgtcaatttagttaatcattgttattaataaaggaaagatataaaa
+aatattctccttcttaaaaaggggttcggttcccccccgtaaggggggggtccctcactc
+ctttggtcggactccttcggggtccgccccgcgggggcgggccggactaatttaactttt
+aatattaatattaatattatttatatttttaatatataaaaataaataattttattttta
+ttaatagtatattatataaacaataaaatagtattaattatataaaatttatataaaata
+tatataaatttattatatatatatatattaatattttaataaagtttttattataaattt
+atttatttatttattataatattaataatttatttattattatataagtaataaataata
+gttttatataataataataatatatatatatatatattattatattagttatataataag
+gaaaagtaaaaaatttataagaatatgatgttggttcagattaagcgctaaataaggaca
+tgacacatgcgaatcatacgtttattattgataagataataaatatgtggtgtaaacgtg
+agtaattttattaggaattaatgaactatagaataagctaaatacttaatatattattat
+ataaaaataatttatataataaaaaggatatatatataatatatatttatctatagtcaa
+gccaataatggtttaggtagtaggtttattaagagttaaacctagccaacgatccataat
+cgataatgaaagttagaacgatcacgttgactctgaaatatagtcaatatctataagata
+cagcagtgaggaatattggacaatgatcgaaagattgatccagttacttattaggatgat
+atataaaaatattttattttatttataaatattaaatatttataataataataataataa
+tatatatatataaattgattaaaaataaaatccataaataattaaaataatgatattaat
+taccatatatatttttatatggatatatatattaataataatattaattttattattatt
+aataatatattttaatagtcctgactaatatttgtgccagcagtcgcggtaacacaaaga
+gggcgagcgttaatcataatggtttaaaggatccgtagaatgaattatatattataattt
+agagttaataaaatataattaaagaattataatagtaaagatgaaataataataataatt
+ataagactaatatatgtgaaaatattaattaaatattaactgacattgagggattaaaac
+tagagtagcgaaacggattcgatacccgtgtagttctagtagtaaactatgaatacaatt
+atttataatatatattatatataaataataaatgaaaatgaaagtattccacctgaagag
+tacgttagcaataatgaaactcaaaacaatagacggttacagacttaagcagtggagcat
+gttatttaattcgataatccacgactaaccttaccatattttgaatattataataattat
+tataattattatattacaggcgttacattgttgtctttagttcgtgctgcaaagttttag
+attaagttcataaacgaacaaaactccatatatataattttaattatatataattttata
+ttatttattaatataaagaaaggaattaagacaaatcataatgatccttataatatgggt
+aatagacgtgctataataaaatgataataaaattatataaaatatatttaattatattta
+attaataatataaaacattttaatttttaatatatttttttattatatattaatatgaat
+tataatctgaaattcgattatatgaaaaaagaattgctagtaatacgtaaattagtatgt
+tacggtgaatattctaactgtttcgcactaatcactcatcacgcgttgaaacatattatt
+atcttattatttatataatattttttaataaatattaataattattaatttatatttatt
+tatatcagaaataatatgaattaatgcgaagttgaaatacagttaccgtaggggaacctg
+cggtgggcttataaatatcttaaatattcttacataaatattaatctaaatattaatata
+aatattaatattaatagttccggggcccggccacgggagccggaaccccgaaaggagaaa
+tattaatataaatataaatattaatataaatataaatataaatataaatatattttaata
+taatataatataatatataatatattatataaatataatatataaataatataataaaat
+attttaatatatatataatataatataattattattataatttaatataaattattatta
+taatttaatataataaataaataaataattataattataattataattataatctcaata
+tataaatgataaattattataaatacaaaggaaataattgatttttaaaatatatttaat
+aaaatatataatataaattatactttttttgttattatataataattatattaatatatt
+taatagaattaaactccttcggccggactattattcattttatatattaatgataaatca
+ttaattattattaataaatttatttataatatttaattttatatattattatttataata
+aaaaaaattatattataacaatttaattttaatttttatttttaaattataaaattaata
+atttatttgtttaaataaaatttataactccttcggggttcggccggactattaatataa
+ataaataataaatatttataataaaataatatacatcttctttaaataaaaaaaggggac
+attataaatagtatataaatatattatatcttttttattattattattaataaataataa
+taataatttatatatttataatatatttaatagttccggggcccggccacgggagccgga
+accccgaaaggagaatgtattataattattacatataattattattattcacttcttatt
+aaaaataatactctatataatttatataatttattttaatatatatatatttatatataa
+tataatatatatatttatttattataatcatttttttttaacttaaaataaaacttatta
+taatttatataatttataatttttatataaaaataattatataatttttatttatttata
+taataataatattatttgttatatattatatattatatatataataaataaataaataat
+aaataataataataaggatatagtttaatggtaaaacagttgatttcaaatcaatcatta
+ggagttcgaatctctttatccttgataataataataaaaatatgtatttatttaattatt
+ttaatatttctcctttcggggttccggctcccgtggccgggccccggaactattaatata
+atataatataatataaatattcatttatcttttttttaatattcttaattaattaattaa
+ttaatatattaattataaaaaatatattataattttattattaataagtataaatatatt
+attaataataatttattaaaaatatattattataatatattaatatatcataattataat
+caatattatattatttaattttataatacttaattattaatatattattcatatatatat
+aaattaaattaaattaattatattgaatatataaatatatatatatataaatatataaaa
+aattatataaattattttaagtaaaaataatattaataaaaattatacaataataataat
+aaatattcattattatttaattaatatctcctttacttctttttcctccgttgaggactt
+attattaagtatattattatatactacttaagattatatatataatatatatatatatat
+tatatataaaatataaatatataaataatataaaaattaataaaataaataaaataaatt
+agtccgatcgaatcccctatttaattaaattaaattaaattaagaaagagataaatttat
+ataaaatattatttataattaattataattaaattataatataatataatataaataata
+atataataaaaataaaaataaaataatattagattatattatataatttatataattttt
+taataataataataaataagtttatttataattataaatataaatataaatataaataaa
+gaaggtattatattttataaaatataataataatacaaaatttatattttaataaatatt
+aatataagtttaaagttccggggcccggcacgggagccggaaccccgaaaggagaaataa
+ataatatatttataaaaaattaaataaataaatattatctatttaaaaataaatataata
+taatataatataataattctaaatataaataatatttattataattattataataattgt
+attatttattaataatatatataattatattaaaactaatattacattattttgtatatt
+taaacaattaaattgattattcttatttgtaatctttatttattttattatatcttatta
+atgataaattataattattattaaaataataatttacttcttttgatataaaaataaaat
+aatatagttccggggcccggccacgggagccggaaccccggaaggagataaatatattat
+atttttattcctacctattaaaggtaaagactcgattctcataattaaatttatatcctt
+cggccggattaatttattttatttatatttatatttatagtgaataccttttttaatatt
+tatttttaatatttatttttaatattttatttttaataaaatataatcttgtaagtaaga
+aaagaatttcggtgattggaaccttgaaaggataaatttcttatttattataatatttat
+attaatagttccggggcccggccacgggagccggaaccccgaaaggagtattattaaaca
+tttaatatattatattaatatttaatttaaatgattaatatattattataataatattta
+ttttatattaaaatattataattaatatatatatatttattttaataatattattattat
+tattattaaaattattatttttataaatatatatatatatatatatatattatttttatt
+cttatataaattatataaaaaaaatatatataatatataattaattaatatatattattt
+aaattatatattatttaaaatactttttatattatatcttctttaaattaaaatataatt
+attatttatattataattatttatgaaatattattattaaaataaaaaagaggtttagac
+tatatatttattatttataaacttattatattatttattattaatagttccggggcccgg
+ccacgggagccggaaccccgaaaggagaaataaataaaataaaaaataataaatattaat
+attattaaatattatttataataaatattaatattattaaatattattcatattaataaa
+ttttattattatttgtaatatattaaatattaataatatatatattatttattataatga
+aaacctatcctatattatcctatcatataatatcatatcatattatattatatcttatta
+tatgatatataaagtattcactctatatgaggttatgattattatataaatcttatttta
+tttttatttttatttggactaataataattataataataattattgatatgttctaatat
+taataaatacatatttatattataatataaatattcatttcttactaattaataaaaagt
+ttttatattcattataatataaatatataaatatatataaatattttaataattataatt
+atattaagatattataaatatatatttatttttttttataaaataaataaataaataaat
+aattaatatttttatattataacttatttttataataataataagtattttattttttat
+tatattattatttatataattatatatatattaatttcaatttaattaattaattaattg
+gtatttggcatataatatcaattaattgtaattcttataagaattaattaattaatatgc
+tttttatataatttatacttttatatttctccttccggggttccggctcccgtggccggg
+ccccggaactattattattatttttatttatttattattaaaatataataataaatagtc
+cggcccgccccgcggggcggacgccggaggagaattatatttttatataataatttatat
+ttctatatatatatatatatattatatataaatattattatatatatttttatatatatt
+ataattatattcattaatattttattatagtggtggggtcccaattattattttcaataa
+taatttatcatgggacccggatatcttcttgtttttatttattattttattaaatttatt
+ttaattatttatttataatttatattatacaatttattatttcgttaatacctttattta
+tattatataatatattatattattataatatatttattgattatattaatacatttaact
+aatgtgtgctctatatttattgaatagtttggttcttatcacccaccccctccccctatt
+acgtctccgaggtcccggtttcgtaagaaaccgggacttatatatttaatactaaaaata
+taactacattacttttttaatatatataacaatatatatatatatatatattaattatat
+aaaatataatactctatattaaatattatttttatcaatatttatttatatatataataa
+taataataataatcaatattaattatttatatatataagattaatattatttaatatatt
+atgaataatttaattaataaatctttaaatattatcataaaaatataaattaaataattt
+cttatttataataaagaataataatatatataaatataataaagaatgtaaataatatat
+atataatataatataatataaaaaatatatatatatataaatatatatataatatataga
+taataatatttttatataatttattttattattaagtaataaataataaaaaaatcaata
+tattaaataatatatttatattagttcggtttagttggtattttgtaatgagtaaaaagt
+aatatataatattaaataataagtattgatataagtaatagatataataataatattatt
+aatattttatataaataatattaataatatagattatgaaagagagtattaatatcatta
+aatatatatatatgttatataatttaaatgattttaatatatatatatatattatattat
+agattatgatacatttatataaataatatatatataaaaattaattatactattacttta
+taatataataatatttatttataaagatataaaagaattgtttaaagttataactaaaat
+attatatagtattcattaataattaatattataaattcaactattgttatatttataaat
+agaataatatattattatcctttaagatataacaataattatttaaattaaattaaatta
+aatttaattaatttttttttttaatgaatataataataataatattattaaaattaatat
+ataaaaaaaaagtaaaaatggtacaaagatgattatattcaacaaatgcaaaagatattg
+cagtattatattttatgttagctatttttagtggtatggcaggaacagcaatgtctttaa
+tcattagattagaattagctgcacctggttcacaatatttacatggtaattcacaattat
+ttaatggtgcgcctctcagtgcgtatatttcgttgatgcgtctagcattagtattatgaa
+tcatcaatagatacttaaaacatatgactaactcagtaggggctaactttacggggacaa
+tagcatgtcataaaacacctatgattagtgtaggtggagttaagtgttacatggttaggt
+taacgaacttcttacaagtctttatcaggattacaatttcctcttatcatttggatatag
+taaaacaagtttgattattttacgttgaggtaatcagattatgattcattgttttagata
+gcacaggcagtgtgaaaaagatgaaggacctaaataacacaaaaggaaatacgaaaagtg
+agggatcaactgaaagaggaaactctggagttgacagaggtatagtagtaccgaatactc
+aaataaaaatgagatttttaaatcaagttagatactattcagtaaataataatttaaaaa
+tagggaaggataccaatattgagttatcaaaagatacaagtacttcggacttgttagaat
+ttgagaaattagtaatagataatataaatgaggaaaatataaataataatttattaagta
+ttataaaaaacgtagatatattaatattagcatataatagaattaagagtaaacctggta
+atataactccaggtacaacattagaaacattagatggtataaatataatatatttaaata
+aattatcaaatgaattaggaacaggtaaattcaaatttaaacccatgagaatagttaata
+ttcctaaacctaaaggtggtataagacctttaagtgtaggtaatccaagagataaaattg
+tacaagaagttataagaataattttagatacaatttttgataaaaagatatcaacacatt
+cacatggttttagaaagaatataagttgtcaaacagcaatttgagaagttagaaatatat
+ttggtggaagtaattgatttattgaagtagacttaaaaaaatgttttgatacaatttctc
+atgatttaattattaaagaattaaaaagatatatttcagataaaggttttattgatttag
+tatataaattattaagagctggttatattgatgagaaaggaacttatcataaacctatat
+taggtttacctcaaggatcattaattagtcctatcttatgtaatattgtaataacattgg
+tagataattgattagaagattatattaatttatataataaaggtaaagttaaaaaacaac
+atcctacatataaaaaattatcaagaataattgcaaaagctaaaatattttcgacaagat
+taaaattacataaagaaagagctaaaggcccactatttatttataatgatcctaatttca
+agagaataaaatacgttagatatgcagatgatattttaattggggtattaggttcaaaaa
+atgattgtaaaataatcaaaagagatttaaacaattttttaaattcattaggtttaacta
+taaatgaagaaaaaactttaattacttgtgcaactgaactaccagcaagatttttaggtt
+ataatatttcaattacacctttaaaaagaatacctacagttactaaactaattagaggta
+aacttattagaagtagaaatacaactagacctattattaatgcaccaattagagatatta
+tcaataaattagctactaatggatattgtaagcataataaaaatggtagaataggagtgc
+ctacaagagtaggtagatgactatatgaagaacctagaacaattattaataattataaag
+cgttaggtagaggtatcttaaattattataaattagctactaattataaaagattaagag
+aaagaatctattacgtattatattattcatgtgtattaactttagctagtaaatatagat
+taaaaacaataagtaaaactattaaaaaatttggttataatttaaatattattgaaaatg
+ataaattaattgccaattttccaagaaatacttttgataatatcaaaaaaattgaaaatc
+atggtatatttatatatatatcagaagctaaagtaactgatccttttgaatatatcgatt
+caattaaatatatattacctacagctaaagctaattttaataaaccttgtagtatttgta
+attcaactattgatgtagaaatacatcatgttaaacaattacatagaggtatattaaaag
+cacttaaagattatattctaggtagaataattaccataaacagaaaacaaattccattat
+gtaaacaatgtcatattaaaacacataaaaataaatttaaaaatataggacctggtatat
+aaaatctattattaatgatactcaatatggaaagccgtatgatgggaaactatcacgtac
+ggtttgggaaaggctctttaacacgtggcaacataggttaatttgctatttcatttttag
+tagttggtcatgctgtattaatgattttctgtgcgccgtttcgcttaatttatcactgta
+ttgaagtgttaattgataaacatatctctgtttattcaattaatgaaaactttaccgtat
+cattttggttctgattattagtagtaacatacatagtatttagatacgtaaaccatatgg
+cttacccagttggggccaactcaacggggacaatagcatgccataaaagcgctggagtaa
+aacagccagcgcaaggtaagaactgtccgatggctaggttaacgaattcctgtaaagaat
+gtttagggttctcattaactccttcccacttggggattgtgattcatgcttatgtattgg
+aagaagaggtacacgagttaaccaaaaatgaatcattagctttaagtaaaagttgacatt
+tggagggctgtacgagttcaaatggaaaattaagaaatacgggattgtccgaaaggggaa
+accctggggataacggagtcttcatagtacccaaatttaatttaaataaagtgagatact
+ttagtactttatctaaattaaatgcaaggaaggaagacagtttagcgtatttaacaaaga
+ttaatactacggatttttccgagttaaataaattaatagaaaataatcataataaacttg
+aaaccattaatactagaattttaaaattaatgtcagatattagaatgttattaattgctt
+ataataaaattaaaagtaagaaaggtaatatatctaaaggttctaataatattaccttag
+atgggattaatatttcatatttaaataaattatctaaagatattaacactaatatgttta
+aattttctccggttagaagagttgaaattcctaaaacatctggaggatttagacctttaa
+gtgttggaaatcctagagaaaaaattgtacaagaaagtatgagaataatattagaaatta
+tctataataatagtttctcttattattctcatggatttagacctaacttatcttgtttaa
+cagctattattcaatgtaaaaattatatgcaatactgtaattgatttattaaagtagatt
+taaataaatgctttgatacaattccacataatatgttaattaatgtattaaatgagagaa
+tcaaagataaaggtttcatagacttattatataaattattaagagctggatatgttgata
+aaaataataattatcataatacaactttaggaattcctcaaggtagtgttgtcagtccta
+ttttatgtaatatttttttagataaattagataaatatttagaaaataaatttgagaatg
+aattcaatactggaaatatgtctaatagaggtagaaatccaatttataatagtttatcat
+ctaaaatttatagatgtaaattattatctgaaaaattaaaattgattagattaagagacc
+attaccaaagaaatatgggatctgataaaagttttaaaagagcttattttgttagatatg
+ctgatgatattatcattggtgtaatgggttctcataatgattgtaaaaatattttaaacg
+atattaataacttcttaaaagaaaatttaggtatgtcaattaatatagataaatccgtta
+ttaaacattctaaagaaggagttagttttttagggtatgatgtaaaagttacaccttgag
+aaaaaagaccttatagaatgattaaaaaaggtgataattttattagggttagacatcata
+ctagtttagttgttaatgcccctattagaagtattgtaataaaattaaataaacatggct
+attgttctcatggtattttaggaaaacccagaggggttggaagattaattcatgaagaaa
+tgaaaaccattttaatgcattacttagctgttggtagaggtattataaactattatagat
+tagctaccaattttaccacattaagaggtagaattacatacattttattttattcatgtt
+gtttaacattagcaagaaaatttaaattaaatactgttaagaaagttattttaaaattcg
+gtaaagtattagttgatcctcattcaaaagttagttttagtattgatgattttaaaatta
+gacataaaataaatataactgattctaattatacacctgatgaaattttagatagatata
+aatatatgttacctagatctttatcattatttagtggtatttgtcaaatttgtggttcta
+aacatgatttagaagtacatcacgtaagaacattaaataatgctgccaataaaattaaag
+atgattatttattaggtagaatgattaagataaatagaaaacaaattactatctgtaaaa
+catgtcattttaaagttcatcaaggtaaatataatggtccaggtttataataattattat
+actattaaatatgcgttaaatggagagccgtatgatatgaaagtatcacgtacggttcgg
+agagggctcttttatatgaatgttattacattcagataggtttgctactctactcttagt
+aatgcctgctttaattggaggttttggtaaccaaaaaagatatgaaagtaataataataa
+taatcaagtaatagaaaataaagaatataatttaaaattaaattatgataagttgggacc
+ttatttagctggattaattgaaggtgatggaactattctagttcaaaattcatcttcaat
+aaaaaaatctaaatatagaccgttaattgttgtagtatttaaattagaagatttagaatt
+agctaattatttatgtaatttaactaaatgtggaaaagtgtataaaaaaattaatcgtaa
+ttatgtattatgacttattcatgatttaaaaggtgtatatacattattaaatattattaa
+tggatatatgagaacacctaaatatgaagcatttgttagaggtgctgaatttataaataa
+ttatattaattcaacaacaattctacataataaattaaaaaatatagataatattaaaat
+taaaccattagatacatcagatattggttcaaacgcttgattagctggtatgacagatgc
+agatggtaatttttctattaatttaataaatggtaaaaatcgttctagtagagcaatgcc
+ttattattgtttagaattaagacaaaattatcaaaaaaattctaataataataatattaa
+tttttcttatttttatattatgtctgcaattgcactatattttaatgttaatttatatag
+tagagaacgtaatttaaatttattagtatctcttaataatacgtataaactatattatag
+ttataaagtaatagtggctaatctatataaaaatattaaagtaatagaatactttaataa
+atattctttattatcatctaaacacttagattttttagattgatctaaattagttatttt
+aattaataatgagggtcaaagtataaaacttaatggtagttgagaattaggtataaattt
+acgtaaagattataataaaactagaactacgtttacttgatctcatttaaaaaatacata
+tttagaaaataaataaataaattattattactttcttcccctccgaatccgtaatatatt
+tacggatatataatctcgtagtgtaaaaggtgtaacgagattattaataagttgccgtaa
+tatattgtaaaatatattattattacaacactatatgcgggaaaaccctaaagtcataat
+ataatattatccccacgagggccacacatgtgtggccctcgcggggtatggtaaatttaa
+ttaagttataaatgtactatagtattaaaaattattatgaataatttccccacccccatg
+cgaagcatgggggggggtataagtatggacaatccgcaggaaaccaaataataattaata
+tcctgaaacaaagtaagtgaaggagatatcttaaaatatatataatatatattttataaa
+ttattatgtaggatcctcagagactacacgtgttgcacccattatattatgtataatggg
+ttgaagatatagtccaaatataattgaaagattataataaaatgaactatttattaccat
+taataattggagctacagatacagcatttccaagaattaataacattgctttttgagtat
+tacctatggggttagtatgtttagttacatcaactttagtagaatcaggtgctggtacag
+ggtgaactgtctatccaccattatcatctattcaggcacattcaggacctagtgtagatt
+tagcaatttttgcattacatttaacatcaatttcatcattattaggtgctattaatttca
+ttgtaacaacattaaatatgagaacaaatggtatgacaatgcataaattaccattatttg
+tatgatcaattttcattacagcgttcttattattattatcattacctgtattatctgctg
+gtattacaatgttattattagatagaaacttcaatacttcattctttgaagtatcaggag
+gtggtgacccaatcttatacgagcatttattttgattctttggtcaaacagtggccctta
+ttattatattaataatatataatgatatgcatttttctaaatgctggaaattattaaaaa
+aatgaattacaaatattataagtctattatttaaagccttatttgtaaaaatattcatat
+cttataataatcagcaggataagataataaataatcttatattaaaaaaagataatatta
+aaagatcctcagagactacaagaaaaatattaaataattcaataaataaaaaatttaatc
+aatgattagctggattaattgatggtgatggatattttggtattgtaagtaagaaatatg
+tatcattagaaattctagtagcattagaagatgaaatagctttaaaagaaattcaaaata
+aatttggtggttctattaaattaagatcaggtgtaaaagctattagatatagattactta
+ataaaactggtataattaaattaattaatgcagttaatggtaatattagaaatactaaaa
+gattagtacaatttaataaagtttgtattttattaggtattgattttatttatccaatta
+aattaactaaagataatagttgatttgttggattttttgatgctgatggtacaattaatt
+attcatttaaaaataatcatcctcaattaacaatttctgtaactaataaatatttacaag
+atgtacaagaatataaaaatattttaggtggtaatatttattttgataaatcacaaaatg
+gttattataaatgatccattcaatcaaaagatatagtattaaattttattaatgattata
+ttaaaataaatccatcaagaacactaaaaataaataaattatatttaagtaaagaatttt
+ataatttaaaagaattaaaagcttataataaatcttctgattcaatacaatataaagcat
+gattaaattttgaaaataaatgaaaaaataaataaattatttaataaagatatagtccaa
+attatatatatataatatatatatatataacaagcaccctgaagtatatattttaattat
+tcctggatttggtattatttcacatgtagtatcaacatattctaaaaaacctgtatttgg
+tgaaatttcaatggtatatgctatggcttcaattggattattaggattcttagtatgatc
+acatcatatgtatattgtaggattagatgcagatcttagagcatatttcctatctgcact
+aatgattattgcaattccaacaggaattaaaattttctcatgattaataaatccctttag
+caaggataaaaataaaaataaaaataaaaagttgatcagaaattatcaaaaaataaataa
+taataatataataaaaacatatttaaataataataatataattataataaatatatataa
+aggtaatttatatgatatttatccaagatcaaatagaaattatattcaaccaaataatat
+taataaagaattagtagtatatggttataatttagaatcttgtgttggtatacctctata
+tactaatattgtaaaacatatagtaggtattcctaataatattttatatattataacagg
+tattttattaacagatggttgaattgattatctatctaaaaaagatttagataaaaaaac
+aattatagaaattaattgtagatttagattaaaacaatcaataattcatagtgaatattt
+aatatatgtatttatattattatcacattattgtataagttatcctaaaataaaaattgc
+taaagttaaaggtaaatcatataatcaattagaattttatactagatcattaccatgttt
+tactattttaagatatatattttataatggtagagtaaaaattgtacctaataatttata
+tgatttattaaattatgaatctttagctcatataattatatgtgatggttcatttgtaaa
+aggtggaggtttatatttaaatttacaatcttttctaactaaagaattaatttttattat
+aaatattttaaaaattaaatttaatttaaattgtctattacataaatctagaaataaata
+tcttatttatataagagtagaatctgttaaaagattatttcctataatttataaatatat
+tttaccttctataagatataaatttgatattatattatgacaaaaaaaatataatatgat
+taattaattaattaattaattaatttatttattatttacttttttgatatatatagaggc
+aaactcgaggaaaaccatataattagaataagtaataattatatgacaaccgtcgaacta
+aatcatattcaagaaattaatatgtaaaagcgtagagattagacgcctctggttatctaa
+gtaatatatatatatatattatatgataacataaggtataatccaatgagatcagtaatg
+attttaaaacaataattttgttttaagtattaataataatattaatattcgacctcttaa
+ttgaggatattataatcataattttttatattataatataaaatttaactagctagataa
+tattatataaaaaaaaaaaataatattatataaattaattaaaataatttttattaattg
+aaactgaaatgttttaaagttaaataaaagagctctaatccatggtggttcaattagatt
+agcactacctatgttatatgcaattgcattcttattcttattcacaatgggtggtttaac
+tggtgttgccttagctaacgcctcattagatgtagcattccacgatattaatttaataag
+tgtcgtgcttaaaattcactaaaataatatataataaattataataaatatataaaaaaa
+ataaaaaaaataaaaaaaaattaatatcttatgattaattttatataaataaaaatttat
+taaatattattggttatatatatatatatattaataataaaaaaatatatatatatatat
+agctaacggggaaactcttataattattatttatataataaataagacaatcccgtgata
+actttaatatatatatattatatattaaagtattgtagagactaaacgtgaatgatttta
+atattatttaaatattaaaattaagagatagtccaatcttatatgtaaatataagttaat
+accaaaaaaaaaataatattattttgacttattatatattaatattattaataataattt
+taactaataataaagtttttatagaaactttatattattatttaatatttaattttcaat
+taatatctccttttggggttccggtccctggtccggcccccgaaactaaagatattaaga
+atttatatgaatcaattataaataattatattaatattttaaataaatatcttattaata
+ttaataaagataatattaataaattaaaatttttagataattatactgaagaagaaaaag
+gttattatttatctggattatttgaaggagatggtaatatttatactagatgtttttcaa
+ttactttttctttagaagatgttttattagctaattatttatgtctttattttaaaattg
+gtcatattacagctaaatataattttaataaagaattaacagctgttaaatgaaatatta
+taaaaaaaaaagaacaagaagtatttataaattatattaatggtaaattattaacatata
+aaagatatgatcaatattttaaatataattttaataatcgtttaaatattaaattattaa
+aacctaaagaatttgatttactattaaatccttgattaacaggttttaatgatgctgatg
+gttatttttatctaggttttcaaaaacataaaaatagtcaatgattaaaatttcatttag
+aattatcacaaaaagatagttatattttagtccggcccgcccccgcggggcggaccccaa
+aggagatattattaaaaaatattttaaacttggtggtattttaaaaagagattataaatc
+tggtgctacagcttatatttataaagctcaatcatcaaaagctataaaaccttttattga
+atattttaataattatcaaccattaagtcttagaagatataaacaatatttattattaaa
+tattgcttacttattaaaattaaataaattacatatattacttaattctttattaatatt
+aaaagaattaatattattacaaagtgttaaaaatatatctttagaaataaaaaatgaatt
+aaataatagagttaaaattattattaataaacttcattataacaatatcgaataatgata
+atattaaagagtaaaattcttaaagtgttaattaaataatattcttttttttttatgact
+tactacgtggtgggacattttcgtgcggtctgaaagttatcataaataatatttaccata
+taataatggataaattatatttttatcaatataagtctaattacaagtgtattaaaatgg
+taacataaatatgctaagctgtaatgacaaaagtatccatattcttgacagttatattat
+aaaaaaagatgaaggaactttgactgatctaatatgctcaacgaaagtgaatcaaatgtt
+ataaaattacttacaccactaattgaaaacctgtctgatattcaattattatttattatt
+atataattatataataataaataaaatggttgatgttatgtattggaaatgagcatacga
+taaatcatataaccattagtaatataatttgagagctaagttagatatttacgtatttat
+gataaaacagaataaaccctataaattattattattaataataaaaaataataataatac
+caatatatatattatttaatttattattattatattaataaaatttaatatatattataa
+ataattattggattaagaaatataatattttatagaaattttctttatatttagagggta
+aaagattgtataaaaagctaatgccatattgtaatgatatggataagaattattattcta
+aagatgaaaatctgctaacttatactataggtgatatgcctatctttatttatatatata
+ttattattattaataataaaaaaaaaaattaaaaaaaagataggaggtttatatataact
+gataaatatttattatattatttttttttataataaatattaaaagatattgcgtgagcc
+gtatgcgatgaaagtcgcacgtacggttcttaccgggggaaaacttgtaaaggtctacct
+atcgggatactatgtattatcaatgggtgctattttctctttatttgcaggatactatta
+ttgaagtcctcaaattttaggtttaaactataatgaaaaattagctcaaattcaattctg
+attaattttcattggggctaatgttattttcttcccaatgcattttttaggtattaatgg
+tatgcctagaagaattcctgattatcctgatgctttcgcaggatgaaattatgtcgcttc
+tattggttcattcattgcactattatcattattcttatttatctatattttatatgatca
+attagttaatggattaaacaataaagttaataataaatcagttatttataataaagcacc
+tgattttgtagaatctaatcttatctttaatttaaatacagttaaatcttcatctatcga
+attcttattaacttctccaccagctgtacactcatttaatacaccagctgtacaatctta
+agttataaaatttaattatttacttaataattaaaaagtaaatattatatctaaacttaa
+taatataataataatattcttataaaaatatataaaaaaaaatatataaaatttattaaa
+atatctcctttcgggaactataatatatttatataaataaatactaatataatcctatta
+tatatatatatatataaaataatatatatatataattaatataaataatatttataataa
+ttttttaataatatatataatttaatatattaatgaatattatataattattaaatatat
+tataatattattattattttataataaaaatatttttaatactaattattatttattatt
+tataaatatataaatagtatgtttaatattattaatactaaaaaaaatataattataatt
+aggatctaacaatacatttatctgattaatattaatattaatattaatatttatattaat
+aaacggattaaattaattgtatccaatttaattaaattatagatatattatttataatat
+taatatattgttttattaaaaaggtaaaaatagtttttattttatatataaatataggat
+ataaataaatatattatagtgaaccccgaaaggagaatatattaagaatatatttatatt
+ttacatataattatttataatataaatatctccgcaaagccggattaatgtaattattta
+ataattttatttaataatttattaaaataaatatttacatttgataatatttatattatg
+tcagttattttatattaatgtttaatctattataatatttttttttataaatatattatt
+tatttatattaattatatatatatattatttttataatatatatatatttttattaaata
+tttattaaatatttattaaattattataatgttgttattaatcttattaaaaaatatata
+taaaaatgccacaattagttccattttattttatgaatcaattaacatatggtttcttat
+taatgattctattattaattttattctcacaattctttttacctatgatcttaagattat
+atgtatctagattatttatttctaaattataatatatattattaatttatttattcatat
+aaatattattattatatataaatattaataatatttatacttatttaataataataaaat
+aaaaaataattataatttaatatatttaatatatttccttacggactatatatttatata
+tatatattaaatacaatttaatttaatttaattatgttatttattaaataaagttatatt
+atgatataataacaatattatatattattatataattataatatattttaatataattat
+caaaagaaataataaaaaaatattaataagaatataatttaataattattaaaaaaaaat
+tcttatagtccggcccgccccccccgcggggcggaccccaaaggaggagtaataaaaatt
+attaaatacaaatattatatatatataattcattatatatatatatatataataattaat
+cttatttttttatatatttatttatatatctatttatattttatatatatttatttatat
+atctaaggggttcggtccctccccccgtaagtataatatacgggggtgggtccctcacta
+tttatatttttattttatatattttatatatttataaataaagtataataagatataatt
+atgattaattatttataagttatagttttataaatttataattattatgtttaatttatt
+aaatacatatattacatcaccattagatcaatttgagattagactattatttggtttaca
+atcatcatttattgatttaagttgtttaaatttaacaacattttcattatatactattat
+tgtattattagttattacaagtttatatctattaactaataataataataaaattattgg
+ttcaagatgattaatttcacaagaagctatttatgatactattataaatatgcttaaagg
+acaaattggaggtaaaaattgaggtttatatttccctatgatctttacattatttatgtt
+tatttttattgctaatttaattagtatgattccatactcatttgcattatcagctcattt
+agtatttattatctctttaagtattgttatttgattaggtaatactattttaggtttata
+taaacatggttgagtattcttctcattattcgtacctgctggtacaccattaccattagt
+acctttattagttattattgaaactttatcttatttcgctagagctatttcattaggttt
+aagattaggttctaatatcttagctggtcatttattaatggttattttagctggtttact
+atttaattttatgttaattaatttatttactttagtattcggttttgtacctttagctat
+gatcttagccattatgatgttagaattcgctattggtatcattcagggatatgtctgggc
+tattttaacagcatcatatttaaaagatgcagtatacttacattaaattataaaataaaa
+ttataaaataaaataatttacatatggagtattaaactataataaatacaatatacccca
+tcccccccttttaataatattcttttatctaataaaatatttatttattaatattattat
+tatcttcttcaaggacttatttaatatatttaataacttattatacttatttatatttat
+aattaatacaaatatattattaatcttactccttcggagttcggccccccataagggggg
+gacctcactccttccccactgcactggatgcggggacttatttttattattattatttaa
+tctttatttataaaattatatattatatataaattattatacttaataattaaaaaaaaa
+cctctaattattattaatattatatataatatatatattctcattaatgttatatataat
+atatatattctcattaatatattaatatagtattaaaaaaaataaaatatttaataaata
+ttattattaataatatttattaaaaataatataacataataaatataagattattatata
+atatatttattatatcatatagttccggggcccggccacgggagccggaaccccggaagg
+agaaattataacatattttttaataatattcatatttattttatatacaaataaatatat
+ttatttagaataataaaaaaaaataataaataaatatattattatcattattatacttta
+ttcattatttattataataattatatataacaattataatatataattatattttatata
+atattatattaatatttaatatatttattattattattacttctatggaaactttatatt
+ttagatatttttattattattattaatttataatgttatatttttgatttataaatatat
+aagtcccggtttcttacgaaaccgggacctcggagacgtaatagggggagggggtgggtg
+ataataaccagaatattcaataaatacagagcacacattagataaattttataatataac
+caatataaaataaaattaaaataattaatatatatatataaatataataaattattatat
+ataaatatatataatttttataataaatattataatattatataaataaataattataat
+atataataaatatataataataataaaaatattaacaatataataaaaatttataatata
+aatataaattataaataagttaaattaataaaataataaatgattaacaagaagatatct
+ggggtcccattaataattattattttcaataataattgggaccccccaccattataatat
+catattaattaatataataataatgtatataaaatagaaataataattaatataataata
+ataatatatataaaatagaaataataattaaatatatatataaataattatttatataat
+atattataaataataataataataaatatttattaattaataatgattataaatatttta
+tttaatataaatttataactattttattatatatatattttttattcataaaaattcctt
+ttgaggatttttattttatataaatatcttctaatatttataataaataataatatattc
+attatatttataattatatataatgtaatacgggtaaacattacccgttgttcacgggta
+atgtttaccctattttatataattcttaataaatatatttatatttttatataaaaaaaa
+ttataataatttattaattctcctttcggggttccggctcccgtggccggaactccggaa
+ctataaaaataattttaatataatttatatattttatgattaatataatatattattaat
+gtaactccttcgggatttggtccccctcgtaagtatatagtatatagtatatagtatacg
+gggggtccctcactccttcggggttcggtcctcccttacgggtacggatacggatacgaa
+tatggggagtccctcactccttatcactacgctgaaggtggaatttattttatattatta
+ttaaatctttatttatttaattatatatttaatatatatattattataataaaacaccta
+attattattaatgttatatttaatataatatatatattcttaaaaatttatataatataa
+ataaataaaaaaaaaagaaagtacataattaatattattataaataatattattaaaaag
+aatataatataattaatagaaagacgttttaaaaataaaaataaaaataaaaataaaaat
+aaaaataaaaataaaaataaaaataaaagagttttggtttacatatcaagacccaattca
+attgaaactatttatttattaatctcctcccctccccctcactattattataagtacaat
+tagggcgccaaccccgcagtgttatttactgggaaatgtttatcccaattaatataataa
+cgagagttattaattattatttataaattcatataatgtaatataatgtaatgtaattaa
+tagaacattattgtgttattcaccagtgttaagatatattaatcccaattttatttaata
+gtgaagattatattttattaattatgaatccatattattattatttaatatatttataat
+attatatataattataattataaataatttatataaaaaaagttttattaaaaaatatta
+ttaaaaatataatattaataataaataaaaataatattatactcttaatagaatttataa
+tgataaaaattaagatgaagacttttttttataattattataaatttatataaaaataat
+atatatatatttatatttattttattaatatatataatatatttatgtatattaaaaaga
+tatatttaaatatttttattttttttttataagataatttttgtaaatatataagtaata
+aattaagttttatagggggagggggtgggtgattagaaacttaactgaataatatatata
+aagcatacattagttaatatttaataatataatcaatatataataattataaaataatta
+attatataataataataatgtataaacaatataataaattgtataaaataaaatataaat
+cataaataaagctaaattaataaaataataaatgataaacaagaagatatccgggtccca
+ataataattattattgaaaataataattgggaccccatatagaatataaataattaaata
+tatatatataaataataatttatataatatattataaataaataataataaatattatta
+atctataataattataaatattttattaatataaatttaataattatatatatttttata
+ataactccgaaagagtaaggagatattaatttcttataaaaatttattaataataataat
+atataaaatatataaataatatattatatataaaataaaataaaataaataatatattaa
+aaatattgaaagtattttaataaataataaatttaaaattcatatttataataataaata
+aataaataaataaataagtaaatatttagattctcattaatattaatatttatatttctt
+tttttttataataataaaaatatcatatataaatataatataatataatataataaatta
+ttatatataaataataaatattaaatataatatataataatatataatcttacaatttat
+aatttaataaagaaggaaataaataataataactccttttggggttccggtggggttcac
+acctttataaataataaataaagatgtttactcctcttcggggttccggtcccctttttg
+ggttccggaactaattaatattttatataataataataatatattaatataatttcatta
+ttaataaatatctcctgcggggttcggttcccccccgtaaggggggggtccctcactcct
+tcggagcgtactattattataaataattatatattataatataattaaaaagtattataa
+ttgaaacgaaaattgtaattttaaatggaataataattattatatatttaatatatttaa
+taaagttataatatctctttctaccggactattttattttattttattttatttttataa
+agaaaaatagtaataatattatcttctcctcctttcggggttccggttcccgtgccgggc
+cccggaactattaattatataatataatataatataatataatataatatgatacggatc
+aaacattacccgttgttcactggcaatgtttaatcctattgtatataaatataataaaat
+aattatccctctcgtaatacatatataaaatataaaatataaaataaaaatattatgatt
+attataatatatatatatatatatataaatatatatatataatttataatttatatgatt
+aatatattatatatataaaaaatatattaaatttactttttatagaaaggagtgagggac
+cccccccccttacgggggggaaccgaaccccgcaggagatatttattttaatacttatat
+agtatttattaataatataataattgttattataaatattaataataatataaaaatagg
+gtaaataatataaataatatgaataaatataaaaacatattaaatataaaatatatcata
+aatttaataaatattataataatttataaatgatagatatctggggtcctataaataata
+attattttcaataattatagggacccccacctattatataaatataaatataaatataaa
+tataaatacaaatataaatatataaatatataaatataatataaatacaaatataatata
+taaatataaatataaatatataaatataagtccccgccccggcggggaccccgaaggagt
+gagggacccctccctatactaatgggagggggaccgaaccccgaaggagtataaataaaa
+attaataatatatatataattataatagttccggggcccggccacgggagccggaacccc
+gaaaggagaaataataatataatatataataaaatataacttattaatataatattaaaa
+atataattaacaagaataaatagtccgtgggatcgaacccccttttttatttaatattta
+atatttaaagaaggaattgtttatatatattaatatcttatttggggattaatataatat
+ataagttttggataccaggccaaagaccggaatcccaaaaggagattatataaatattat
+ttatctcccttttttaatattataataattttattaaaaataaaataataataataatta
+taatttataataacaattataataatttaattaattaattaattaattaattaattaatt
+aattaattaataataaatataaatataaaaagaatataatttataataaataaatttata
+tatatatatatatattaaataaaatatttacttcattaatataaaatataaatatattta
+attaataagtatatatatataataatatataataacctatttatatatataatcttaata
+taattataagaaatattatataagtaatatataaaaataatataaaataattataattca
+atttatatattaatagttccggggcccggccacgggagccggaaccccgaaaggaggaat
+aagataaatatataaattatattaataaatataaattttaaatgaattaataaaattaat
+atatatatgtatatatatatatatattaaaaatatttaattatttttaggaaggagtgat
+agatccctttgggggaccgaacccctatttaagaaggagtgcgggaccccgtgggaaccg
+aaccccttttttatttaaagaagaagttttattttattttattttattttattttatttt
+attttattttattttattttattttatttaatttaattttaattaggttaataaatagta
+ataataaacttaataataataataataattttatttttataatttattaataataataat
+aattatatatatatatattattaataaatatagaccttatcgtctaatggttacgacatc
+acctcttcatgttgataatatcggttcgattccgattaaggttattcataataataaata
+tttgtaaaaaaagtatatataattaaacatattctttatattaattaataattattaata
+atatacattttatataatacaattatatatatatatatatttttttttaatacaaataat
+atattcataataataaataccgattgttattatactataataaaatatataatatatttt
+tcattataatatttttaaataaatattataataaattatataaataatatttatgtataa
+taataataataataattgttattaattaattctataattattatatatttaatttttttt
+tttaatataatatataataatataatttattttatttttttttatagttccggggcccgg
+tcacgggagccggaaccccgaaaggagaatataaattaataataatataaataacatatt
+aacaataaattattgttaatataataataataataacaatattaataaataatataaaaa
+ttattaatattatatttatataatattaatataaaaatctttcataatattaattattat
+taaataataatgatatcattaatattaatataatcgtcaatattatttatttatttattt
+atttatttatttatttatttatttattattaaataaatatttttaaatattatattatat
+tattaactttttattaaaaaaattaataatgatataatataattaatattatccacggga
+ccaatgaccaacccagtagttgaccggattggcgcccgcgaggtttatatttaataaata
+ataataataatattaataaaatctattaacttttttttttaatggattatattaatgaaa
+aaaaaatgagaaatatcttttttttttaataattataatttatatataataaaatatgta
+tatataataaaaaaatagtttttaatattataatataattatatatataattataaatat
+atatatatataataagtattaattaataatatatatttatatattttttattaattaata
+tatataaaatattagtaataaataatattattaatattttataaataaataataataata
+tggcatttagaaaatcaaatgtgtatttaagtttagtgaatagttatattattgattcac
+cacaaccatcatcaattaattattgatgaaatatgggttcattattaggtttatgtttag
+ttattcaaattgtaacaggtatttttatggctatgcattattcatctaatattgaattag
+ctttttcatctgttgaacatattataagagatgtgcataatggttatattttaagatatt
+tacatgcaaatggtgcatcattcttttttatggtaatgtttatgcatatggctaaaggtt
+tatattatggttcatatagatcaccaagagtactattatgaaatgtaggtgttattattt
+tcattttaactattgctacagcttttttaggttattgttgtgtttatggacagagtgaga
+caagtataagtatattattataatatcataccattaaataaattattttaatgaaatgat
+tatgtttatatataacatatacctaattagacatgcattattagtaataattttgtatga
+aactctaataataataattattattaattattaaggtaagattcatatggatagcgtaag
+tcaatctaatattataaaatatcgtaacataaacaatatttttttctattattaattaat
+aaataataataaataaaaataattatatgagaagtaagatattcaattctgtctagaata
+catatatatacgttaatactcatcggtataaaattagaatcctaagtgaattattgaaag
+tataataatataaacttggtaagcccaattatttccatataatattaatataaatattat
+atggtagttatatataatattattaaataaataataatagaaattataatatagataagt
+gggtaaaagactattgaaaaagctaaagattatatgtaatgtataatatagatcaaatta
+tttatatattttaataaaaatatattaataatggttaatattattattaattaattaatt
+aattaattaataataataacgaataaatgattaatgtgaaagcatgctaacttcaatata
+ggatgatttatatagtatataaattgtttgagctgtatactatgaaagtagtacgtacag
+ttctgagtgggggaaaatttgtaaagatctacctatcacaattgtcacattgaggtaata
+taaatatcgcctcaaatatatttaatataataaaactaatttatataataatgttaatat
+tattaatttatattttttatacgattataataagacaaataataaaaactaaagaatatc
+ttatattaattaagagtatagattatattaataaaaataaatatataattaatttaaata
+taacaaataagaaagatataaataataatattggtccattaaatataaacattttatcaa
+ttatttatggttcaatattaggagatggtcatgctgaaaaaagaaaaggtggtaaaggaa
+caagaattgtatttcaacaagaatattgtaatattaattatttatattatttacatagtt
+tattagctaatttaggttattgtaatactaatttacctttaattaaaactagattaggta
+aaaaaggtaaaattagacaatatttaaaatttaatacatgaacttatgattcatttaata
+tgatttattcagaatggtatattaaaaatatatctggaaaaggtaatattaaagttattc
+ctaaatctttagacaattatttaactcctttagctttagctatttgaattatagatgatg
+gatgtaaattaggtaaaggtttaaaattcacaactaattgttttagttataaagatgttc
+aatatttactttatttattacataataaatataatattaaatctactattcttaaaggca
+ataaagaaaatacacaatttgttatttatgtatgaaaagaatctatacctattttaacta
+aaattgtatctccttatattattcctagtataaaatataaattaggtaattatttataat
+aaaatatatagtattatattaattattatattattataatgcgatattattgaaaacatg
+tcaaaattatattattaagtaacaagacagtgggttatataattatatgatcccaacaga
+atacaccaataataggtattattataaaaaaaataataatatttaatgtttattcgaaga
+aaatttataatattattattataacacaaggtttaataatctatatatatatattatata
+tataactactgttattattccatttacctaattaatatataaataatgaattataattat
+tatgattaatatttttataataataaccccatcataacatttatatataacatttatata
+taacatttatatataatatttatattatggtattattaggtataaatatttattcataag
+agaaaatagtgattaaatggaattataaaaagggtagatattattaaatacagggtatta
+tttatattaataaatcaataaatattgagattattattattaaaaaataataataattta
+taaataatattattttcttggcactagttattactaatttattctcagcaattccatttg
+taggtaacgatattgtatcttgattatgaggtgggtttaatatagaggatccatattata
+gtaatataatattaaataaatctgttttatgctgaaatatcttcatttgaataataaatt
+actatattattcaattaattatttataataatataatttgaaataaaaataatatagtta
+aaatatttattataagaagaaaattagcagtaattaatatatatatatatataaaattaa
+ttattcagagactttatagttattatataaataatactattatttatgataaaaatcata
+aattaaacacagataatcctatttatgcatatattggtggtttatttgaaggagatggtt
+gaattactatttcaaaaaaaggtaaatatttattatatgaattaggtattgaaatacata
+ttagagatattcaattattatataaaattaaaaatattttaggtattggtaaagtaacaa
+ttaaaaaattaaaaataaaagatggtactattaaagaaatatgtaaatttaatgtaagaa
+ataaaaatcatttaaagaatattattattcctatttttgataaatatcctatattaacta
+ataaacattatgattatttatattttaaagataatttattaaaagatattaaatattata
+atgatttatcttattatttacgtcctattaaaccatttaatactcttgaagatattttaa
+ataaaaattatttttcttcatgattaattggtttttttgaagctgaaagttgttttagta
+tttataaacctataaataaaaaaataaaacttgctagttttgaagtatctcaaaataata
+gtatagaagttatattagctattaaatcatatttaaaaattactcaaaatatttatacag
+ataaatttaataattcaagaataacacttaaaagtattaatggtattaaaaatgttgtaa
+tatttattaataataaccctattaaattattaggttataaaaaattacaatatttattat
+tcttaaaagatttacgtcttattcttaaatataataattattttaaaattcctcctaaat
+attaatcttatataaaaatataataataatatatttatatattatataattatataaaca
+aaatataatttatatataattatttattataaatatagtccggcccgccccgcggggcgg
+accccggaggagtgagggacccctccctattctaacgggagggggaccgaaccccgaagg
+agtttaattatatattaaatatattattatcaataaataattcctttgaactatttatta
+ttttattatatttattttctccttcattattaatttttattaataattaaaatcttatca
+ttttatggtatttttatttctattttaggatatcgaaactataaattaaaaagtataatt
+ttattaattataatttatgattaataaataagaaataaaaactttagaagtaatatttat
+cttttttttttataaataaatattatgattaatatataatcatttataaatatttatata
+taattatatatatacataaataggattaagatatagtccgaacaatatagtgatatattg
+ataatagttttcaaatatgtaactatttaaacattaaaagctcagtatctaaccctctaa
+tccagagattctttgcgttacattatttagtaccttttatcattgctgcaatggttatta
+tgcatttaatggcattacatattcatggttcatctaatccattaggtattacaggtaatt
+tagatagaattccaatgcattcatactttatttttaaagatttagtaactgttttcttat
+ttatgttaattttagcattatttgtattctattcacctaatactttaggtcaaaatatgg
+ccttattattaattacatatgtaattaatattttatgtgctgtatgctggaaatctttat
+ttattaaatatcaatgaaaaatttataataaaactctatattattttattattcaaaata
+ttttaaatacaaaacaattaaataatttcgtattaaaatttaattgaacaaagcaatata
+ataaaataaatattgtaagtgatttatttaatcccaatagagtaaaatattattataaag
+aagataatcagcaggtaaccaatataaattcttctaatactcacttaacgagtaataaaa
+agaatttattagtagatacttcagagactacacgcacactaaaaaataaatttaattatt
+tattaaatatttttaatataaaaaaaataaatcaaattattcttaaaagacattatagta
+tttataaagatagtaatattagatttaaccaatgattggccggtttaattgacggagatg
+gttatttttgtattactaaaaataaatatgcatcttgtgaaattcttgtagaattaaaag
+atgaaaaaatgttaagacaaatccaagataaatttggtggttctgtaaaattaagatcag
+gtgttaaggctattagatatagattacaaaataaagaaggtataattaaattaattaatg
+ccgttaatggtaatattcgtaatagtaaaagattagtacaatttaataaagtatgtattt
+tattaaatatcgattttaaagaacctattaaattaactaaagataatgcttgatttatag
+ggttctttgatgctgatggtactattaattattattattccggtaaattaaaaattagac
+ctcaattaactattagcgttacaaataaatatttacatgatgttgaatactatagagaag
+tatttggtggtaatatttattttgataaagctaaaaatggttattttaaatgatctatta
+ataataaagaattacataatattttttatctttataataaaagttgtccttctaaatcta
+ataaaggtaaacgtttatttttaattgataaattttattatttatatgatttattagctt
+ttaaagcacctcataatactgctttatataaagcttgattaaaatttaatgaaaaatgaa
+ataataattaaattttctccgtattcattattatattatctaatttataaaatatttaaa
+gattccttataataatataacatctttgtaaattattgttaaagataatataaattatta
+tgaatcggtagattatatttttacaatcttattaaataaaattctgatcattaaacatga
+ttgaagaaataataatagtttatgaaataagatagtgtaatataaatttttatgaagata
+tagtccattttatatttattataaaagcatcctgataactatattcctggtaatccttta
+gtaacaccagcatctattgatattaaaaatattaataaaattattattatttaatcttat
+ttattttatataaaaaaaataaataataattattaataaaaatatattatttatttctcc
+tttcggggttatttatatatattcctttataatttatatttaatatattatattaaatat
+atgaaaaattataataaataaattaattaattaataataaataataataaaaagtacagt
+agcattaaatattcttaagtttccgctttgtgggaactcccataaggagtttaatgatta
+aaattggttaattgtcaagaaaatctaaggtattaataaataaataatactatgacaact
+tgcagcgaagtttatatcatctctatattatatattaatatatatatataataataataa
+taatattaatataatataagatataaaaacgttcaacgactagaaagtgaactgagatag
+taatacctttccacgaaaaccaattaatttataaattatttttaaataaagaatagatta
+ttaattttttttatatagttccgggccccggccacgggagccggaaccccggaaggagta
+atatatattatatataaaataaaaaatatatatatatatattataaaatatcaaaagttt
+taatcttttattataaattaatgacatagtctgaacaataatgaaaattattgagataag
+atattaaataatcttatgttaacatatataaattgtgtacctgaatgatacttattacca
+ttctatgctattttaagatctattcctgataaattattaggagttattctaatgtttgca
+gctattttagtattattagttttaccatttactgatagaagtgtagtaagaggtaatact
+tttaaagtattatctaaattcttcttctttatctttgtattcaatttcgtattattagga
+caaattggagcatgccatgtagaagtaccttatgtcttaatgggacaaatcgctacattt
+atctacttcgcttatttcttaattattgtacctgttatctctactattgaaaatgtttta
+ttctatatcggtagagttaataaataatatataattaaattaatacatagatataatata
+tatattattattattaataatataataaaaataaaaataaaattattaataataataata
+ctttaataatattcttaaaaataatatatctctaatttataaaaattaaataataataat
+aaaaaaaaaatattataaaatataaattaattaataatgaaaataatatacttattaaat
+taatataaataaatgaataatataatataactatattgaattataatctatctatctttt
+tttttcatataattataatatatatattaatatatataattattattttatatattatag
+ttccggggcccggtcacggaagccggaaccccgcaaggagatttattaattattattatc
+attattattttttatttaatcttatttattataaaataattaattatcataaagcataat
+tattatagaatcttattattttctttatttaaatttataaaaatataaagtccccgcccc
+ctttttattttatttaattaagaaggtattttaaaaaaggagtgagggaccccctcccgt
+tagggagggggaccgaaccccgaaggagtactcatttaatataaatattaaataaaaatt
+attttatatatattaatgattattaatattgataatataaattattttataattaattat
+tataaatatataactattaataattaatttttaatctaggggtttcccccacttacataa
+acttacgtatacttacatatacttatgtatacttacatatacttacgtatacttatatat
+acttatgtatacttacgtatacttacatatatgggggatccctcactcctccggcgtcct
+actcaccctatttattaatcattaataagaaattattattaaaaaaattataatttactc
+aaagttaattataaatatatttttaaatatctattttattaatcttttataaaatttaaa
+ttaattgtaattaattaatattataataattattcttaggaaggatatttatttatttta
+attatgaattcctgacatagagacaattaattagaacttcttattattattatagtaata
+ataaaaatattctaaatatattatatatattattattttttttattattaataaaatatt
+ataataaatttaaataagtttataatttttgataagtattgttatattttttatttccaa
+atatataagtcccggtttcttacgaaaccgggacctcggagacgtaatagggggaggggg
+tgggtgataagaaccaaactattcaataaatatagagcacacattagttaatatttaata
+atataactaatatataataattataaaataattaattatataatataatataaagtcccc
+gccccggcggggaccccaaaggagtattaacaatataatatattgtataaaataaattat
+aaatattaaataaaaaccaaataaataatataataaatgataaacaagaagatatccggg
+tcccaataataattattattgaaaataataattgggacccccatctaaaatatatatata
+actaataatatattatatatattaatatataataatattattaaaatataatattattaa
+aaaaaaagtatatataaaataagatatatatatataaatatatatattcttaataaatat
+tatatataataataataaattatttcataataaattatttctttttattaataaaaatta
+cttatctccttcgaccggactattaaatattaaatatttaatatttaatatttaatattt
+tattctatagatattcatatgaaaaataataagtatataattatgataatgaatatattt
+ttatttataatttattattataaaaatattttaatttaataataataataaatcattata
+ttaattcttttaagaatttataattgtcattatttattatatactccttattaaaaggga
+ttcggtttccctcatcctcatgggtatccctcactccttctgataattaattttataata
+ataataaaataaacttaattaaatattatatatttatttacaattatatatatatattac
+tcataattaaattaaattaagatgcaattcaatacggttgtattatattattcatcaaat
+attgttaatattgatacctacagagatatttaatatttttattattattatccattactt
+tttttattatattttaattatttatttatttatttatttataataataatatttcatatt
+atcaattattattttttttttttataatatataattaaattatttatatagttccccgaa
+aggagaataaataaaatattatataaatatttatatctttattaatattaatataagtaa
+tatatatagtttatgatatttaattttatcataatataataataattatataaatcttat
+acacatttatataagtatatatatatattattaatataatgaacatctattaaataaaat
+aattgtaaatctcaagtaaattattattattttatttttaataataatttatgatttata
+attaataaataaaagagtaattatatgataaaaaaggtaataaataaaatttatagttcc
+ggggcccggccacgggagccggaaccccgaaaggagtttatttatatatatatatatatg
+aattaatatttaataataaataataatataattaataatattattattattataattttt
+ttatttataatattaataaaatattattatatatatattataataatattaataagatat
+ataaataagtccctttttttttatttaaaataaagaaagaataattaaataatattttaa
+taatttaattaaatagtgtattaaaagataataaaaagtaatattaatatgttaattata
+tataatatatttatatataattatatatatatatataaataataataaatatatatataa
+tataaaaataagaatagattaaatatttaataaataaatattatgcaattagtattagca
+gctaaatatattggagcaggtatctcaacaattggtttattaggagcaggtattggtatt
+gctatcgtattcgcagctttaattaatggtgtatcaagaaacccatcaattaaagaccta
+gtattccctatggctattttaggtttcgccttatcagaagctacaggtttattctgttta
+atggtttcattcttattattattcggtgtataatatatataatatattataaataaataa
+aaaataatgaaattaataaaaaaataaaataaaataaaatctcatttgattaaattaata
+acattcttataattatataattattataaaatatataaatattataataataataatata
+tataaattataataaaaaataataataatatataatataccttttttttaatatattaat
+atataaataaataaataatggataatatataattactttttttatattattaataataat
+aatttataaatattgttataataaacatttatataaataaatataaattaccataataag
+atatattatttattaataataaaaatatttattaataaataagaaatatatatattatga
+taatatttattaataaataataaattctttatatataaatatattaaatatatttaattg
+aacacaatataatttttattgtattattcatttaataatattaatattaatattaatata
+atattagtgaacatctcctttcggggttccggctcccgtggccgggccccggaactatta
+atatttaataaaatatatataatttataattttcatataattaatataataattaggttt
+ataaataaattataatatattataacaatataataaaatatattataaatctatctatct
+atctatataatatataaatttatatatacattaataatatttaattataattatttaaat
+atttaatttattaatattccccgcgggcgccaatccggttgttcaccggattggtcccgc
+ggggtttatattatttaaatattaaatattaaataataatttatattatattaataaata
+taataaattaaaaatatatgattaattatataataataataataattattttaatattat
+aatttataaaattaattatattaattatattaattcttattatataataattattaataa
+taatttattttaagaaaggagtgagggaccccctcccgttagggagggggaccgaacccc
+gaaggagaaaataaattaataaaagtttaaaagttcttatattaataattatataatatt
+atattaaagatttttataatatatatatataatatatttatagttccggggcccggccac
+gggagccggaaccccgaaaggagtttatttaatatttatatttatattaatatttatatt
+tatatttatattcctcttaaggatggttgactgagtggtttaaagtgtgatatttgagct
+atcattagtctttattggctacgtaggttcaaatcctacatcatccgtaataatacatat
+atataataataattttaatattattcctataaaaataaaataaataaataaataataata
+attaattaattaattaattttaataaatataaaatatataaaaataataataataataat
+tattattttaataatattatttatataatagtccggtccgaccctttttattcttaagaa
+gggattttattttattaattaataataatatattaaaaattataaataattaataattct
+ttatatttatatatatatatatatatttatatatttatatatatattttaataatattat
+gatatattttattttaataatatttttatttttatatataaaattataatattttatttt
+ataaattatttatatataaattattaataataattatttttttttatttgggatttatat
+tattattataaagaatataatgttattaataactgcaaaaaatatctaatatattattat
+ttataataataaataatattataataaggatgcatattatatatatatatatatttctat
+ttatattaatattaatattaatatgtatatataatagataaaaagtaaaaataaaaaata
+atgaaattaaaattattaaatataattttatcaataataaataaacttaataataataat
+aatattattattaataatctattagattcattaataaataagaaattattattaaagaat
+atattattagatataaataataaaaaaataaataatataaaaagaatattaaataataat
+aatataaaccccgcgggcgccaatccggttgttcaccggattggtcccgcggggaatatt
+aataataaattacaacatttaaataatataaataattgaaatctacaaatttataattat
+aataaaaatatagaaattataaatactataaatgataaattaattaataaattattatat
+aaaataataactttaaaattaaataatataaatattaataaaattattataagtaaactt
+attaatcaacatagtttaaataaattaaatattaaattttattattataataatgatatt
+aataataataataataataataataataattattatataaatataataaataaattaata
+aatattataaataataatataaataataatttatgtaatattttaagttattattataaa
+aaaaaagtaactattgaacctattaaattatcatatatttatttaaatagtgatattttt
+agtaaatatattagtttaaatgatatagataaatataataatggtatcttaactaattat
+caacgtatattaaataatattatgcctaaattaaatgatcataatatttctataaattat
+attaataatattaataatattaataataataaatataataatataattaatttattaaat
+aataataataatattaataataataataattataataataataataataattatattggt
+aatattaataatatttataataatataactattgataatattcctatagatattttaata
+tataaatatttagttggttgatctattaaatttaaaggtagattaagtaataataatggt
+agaactagtacacttaatttattaaatggtacttttaataataaaaaatatttatgaagt
+aatattaataataattataaattaaattatatcccttctaatcataatttatataataat
+tctaatattaataaaaatggtaaatataatattaaagttaaattaaactttatttaatat
+atatattaatagttccggggcccggccacgggagccggaaccccgaaaggagaaataaaa
+taaatataataaataaaataaataaataaataatatatatatatatataaatatataaaa
+taatatttactttttatatatatataattatatataaataaaatataatataatatcata
+taattatataaaaataaaattataatttatttatattaaaaatattaattaattaatttt
+tttatataattattataataataatttaattaaaaataaatatcaaataaaattataaat
+taatcctacttttggatcctatttatattttattattataaataattattattgatagtt
+aattaaataaaaatatatatatatattactccttcggggtccgccccgcagggggcgggc
+cggactattataattattattaatatattaattattaaattatataaaccgcccccgcgg
+gggcggttagttatttatattaatatattttatattaatatataatactcttttttctat
+tatattttaatatataatattaaaaaaaataaataaaataatattcttaatttttattct
+ttatcttctttaaccaaactccttcggggttcggtccccctcccattaggttagggaggg
+ggtccctcactccttcggggtccgcccccccccgcgggggcgggccggactattttaaat
+tttaatttaaattttataaatataatatttaattataaatttaataataatatataaaaa
+atatatatatggttaatatatataaagattataatctttttattaaataaaggaaaattt
+attatataatttttctctatagttatatatttaaaacttatttttttttttttataaata
+ataattataataaataatattaattatttattatataattaattggcccccatgctgggt
+tccggaactcctccttctcgcgaggttaacacctattatataactataactataactata
+actataattataattataactataactataaatattcattttaataataataataataat
+aatattaatataaatagtcgaagaatatatttatttattttaatataaataaaaagtttc
+aattaatttgaatttggaattaaattattacttcatatggggttatggatttcgttcgga
+actcctccctcctacctctatttattaatcataaatcataaattattattaattaataat
+aataatttactcgaggttcatacctattttaatattaatattaatattgataaaatatat
+attcactaaaaagtatataatttactcaatttatactataattttatatttttttattat
+aatttaattatttcaaataaagtaattataataatatatatcctttattaaatatatatt
+aattaatatatatataaaaagtaaatattattaattgtatataattataaataattaata
+tttattaaaatatatataatttataatcctcatataattaatataataaataatataaca
+caatgtaatttaatttaattacataataaatttattattattataattattatttattta
+tttatttattattataaattataaatattattataattaaaatcaattattaattattaa
+tgataaataattaatgataaattatcaataaccaattagattatttatcgatatttaatt
+atattatattatattatattatatatatatatatatattatattataaaatttatttata
+aatatttgtttatttatttatttattgaataacaatagaattaaatattgtcaataaata
+ataaataatgtttaatatatattatattatattaatattaatattattattatttttttt
+attatattaatataatttataaaaatataaaattattatttttattataatttatatata
+tataatatatatatttattaaaatattttaagaaaggagaaaaataattaaattaaatta
+aattaaattatttattattattattattatttatataataatatattatttaaatattta
+tatattatttttatattaatatttatagatggggggtccctattattattgaaaataata
+attattaatggaccccagatagcttcttgtttatcatttatatatatatatatattatta
+attattttattctcctttcggggttccggctcccgtggccgggccccggaactttataat
+attattattaattatttaattaatattataatcatataatttaatattttatttaatttt
+attaaaatttaatatatatatttttattattatttaattaatttataaatataaaatatt
+cttaatattaaaaataaataaataataaagtttataaatcatatattataattatttatt
+atttttatattatattaataaaatattattattataaaaaaaaatagaaattttataata
+tttttatatatttttaattattattattaatatttattaaaggaaatataaaaaccgaag
+gaatattataattataattataattattattatatttaatttattattataataataatt
+atagtctgccccctctttatctttattttaaagttccggggcccggctacgggagccgga
+accccgaaaggagaaggatatttaataatttataatatttaattcatatatatatatata
+tattttattttttatatatatatttaatatattatatttatatttatattattattatat
+ttatattatattatttaattattttttaataatatattattaatattttaccttttgata
+aataaaaatttattaaaaattttataataagtattaaaatatcataaaagtataatattt
+atataaaatgtataaatttataatcttctaattaaattaaattaaataaataaaataaaa
+taaattaaactccttttgagattcacacctattttattaaaaataggtattcacttaatt
+aaattaaattaaattaaattaaattatggataatttatttaataaatatatatattaatt
+ataaaataatagtccggcccgccccgcggggcggaccccgaaagagtctgccccttttta
+tttaatatttaatatttaatatttaatatttaatatttaatatttaaagaaggatatatt
+tataatttatcataatattatttaataagaaattattaattaattaattaattaatttat
+ttattgtttatatttattaatattaatataataaaaatgtaaaatacttaatattattaa
+tattattatatataatatatataataatatattatatttatatctcctttattccttttt
+cccccgatggggacttattatattatattattatatatttcttcgataactttatatata
+ttttatttttataaaaaaatatttatatattattatttacaataataattattaatagtc
+cggcccgtcccgcgggggggaaccgaaggagtgcgggaccccgtgggaaccgcatccctt
+tttatttttaattaagaaggagtgagggaccccgtggggaccgaaccccgaaggagtctt
+ttttctatttattaataataactataaattatatttaaaataataatttacttgttataa
+tcttaatgttccggggcccggccacgggagccggaaccccgaaaggagaagtatataaat
+atttacttgttataatttattatatatttataacctccttcttaaaattatctttacttt
+ataataaaaattaatataatataatctgataataatcgaattttattatatttaatttaa
+ttaataatagacaattattattattattttacttattaatattaatttagatttatatat
+ataaatattattaattttatattaattttttattaattatttatttttatattcatattt
+tttattaatattatttttattaataactttttaaataattataaactatatattatttat
+atttatatttataataaatgaaacaattataataaaaattacaattacaattatattata
+attatgattacaatagggttaaacattacctgtgaacaactggtaatgtttaacccgtat
+tattatttattatattatatatatattaaaatattaatattaatattaatattatattat
+attatattatattatattatattatattatattatatttataattatattatattatata
+atttatatacttttataattcttattattatttatttattatttatttattattatttaa
+atatattattattatatattaataatatatatattattttatatattttatttaatataa
+attatttatatttttatattttattatgagggggggtcccaattattattttcaataata
+atttatcatgggacccggatatcttcttgtttatcatttattattcttattatttggttt
+ttatttaatatttataatttattttatacaatttattatattgtttataccttattatta
+ttatataatatattatattattataataatttaattaattatattattaaatattaacta
+atgtgtgctctatatatattattcattctagtttctaatcacccaccccctccccctatt
+acttatatatctagaaataaaaatacataacatatattttaaatatatatatataattat
+ataataattattatatataaaatatatatatatataatatatatttataaaataataata
+ataaatattattactccattagaggttttggtcccatatcaggaaccgaaactataataa
+tatataatattataataaagatattcttatttataatatattattaaataaattaataat
+aattataatatatatatataatatattataatatatttattcgagaactttttatttatt
+ataaaataaaatattttatttattatttagtttttttttattaaacattttataaaaata
+taaatgttaataatattatgattaataagtaataataaatttatttatttttattaatta
+cttcttcgaggtattagtatcagtatcagtatcagtatcgtaaaaaacgggtgactaaaa
+tatatatatatataaaattataaataaaaatattataataattttaaataaataaatatc
+aatatattattattatttatattataataaatattatctaataatagtccggcccgcccc
+cgcggggcggaccccgaaggagtccgaaccccttttttatttaattttatttaaagaagg
+agtgagggacccctcccgttagggagggggaccgaaccccgaaggagataattagatata
+attatattttattttatataaattatataatattatataataataattatataataagtt
+aataataattatataataagttaataataatcatatctcctttataaatgaacttttatt
+aaatatattttattaaatattaaatatattttttataatattaaatatattttattaaaa
+tatttaatatattttattaaatattaaatatattttattaaatattaaatataaataaag
+gtttatattataattcattatttatatcttctttataaattaatattcgtattagatcct
+tatttaatttataatcctttaaaaaacttttaataaatataatataatatatatataatt
+tttattatttttatattatttttattatttaaatatattatatatttcattataataatt
+atttaaaaagttatttaataaataatctgatattatattttataattaattttatttatt
+ttatttattatatatattattatatataattaaaattataattacaattataactataat
+taaattaaattaaattaaattggattaaattaaattaaattgggcgccaagccggttgtt
+caccgacttggtcccaatataatatgagataatataatatactatatgatataacataaa
+tataatatattatatgatataacataaatataatatactccttcggggtccgcccccgcg
+tgggcggaccggactatatgaatatattattattataattataaaattataataaataaa
+taaaatttctttaataattattaattaatattattaatttatttacaaatattttattaa
+tttttatttttattaaatataaatatataaatatatatatatttatttataatattattt
+atatttattatatattattattaaatatatttttattatatatcattaaatattaatatg
+ttattatagtggtgggggtcccaattattattttcaataataattattattgggaccccg
+gatatcttcttgttaatcaattattatattatttaatttattttatttcttatttataat
+ttatattatataatttattatattgttaatactccttcggggtccccgccggggcgggga
+cttttatttatattattaattatattatattattataatatatttaattgattatattat
+aaaattataactaatgtatgctttgtatttattgaatagtttggttcttatcacccaccc
+cctccccctattacttctccgaggtcccggtttcgtaagaaaccgggacttatatatttg
+gtaattaaaaatataacttatataaatatttaataaatatatattaaatatattattatt
+aataatttattattatataaaaaaataataaatattattaatgatttaaattatataaat
+attaattattaaataaataattatactttctcctttcggggttccggctcccgtggccgg
+gccccggaactttaaaataatatatatatatataaaagtattttataataattagtttaa
+ttattattctttttttttattaaatataaaatcattttaggttattaatttttatttatt
+aaaaataaattttataattaatatttctcctttcttaaaataaataatattattattata
+attattaattaatgaatactcttctcttttggggttcggtccaccctcccgtatacttac
+gggaggggggtccctcactccttttgagactttaattttataaatataaatataaatata
+ataagatgttaactcttttataaataaataataaatataattctatttttaataataata
+tataatatttttataataaaatatataaataataatatttatatatatatatatactttt
+ttttatataagaataatatatatagttcacattggaggcgagtaaaaggagataagaaat
+ataatataatataataataaaaatataatgaataataataataaaaatttatataataac
+aaaatagtccgaccgaaggagatgagattattaatattattaaataataaaatgtattaa
+ttataaaatataaaacctataaataatttataatataatttatattatgataataataat
+atatatattataatattttatatatatatttattatatttatatttatataaaaaagtga
+tattgattaattaattaatttataattaataattattaatatagtccggcccgcccccgc
+ggggcggaccccgaaggagtccggccgaaggagtttattatattatattaaataagattt
+ataatataattaatatatattttaataaatataaaagattatattatattataaaaagta
+tattttatatttatattttatttattattattattatatatataagtagtaaaaagtaga
+ataatagatttgaaatatttattatatagatttaaagagataatcatggagtataataat
+taaatttaataaatttaatataactattaatagaattaggttactaataaattaataaca
+attaattttaaaacctaaaggtaaacctttatattaataatgttattttttattattttt
+ataataagaataattattaataataataaactaagtgaactgaaacatctaagtaactta
+aggataagaaatcaacagagatattatgagtattggtgagagaaaataataaaggtctaa
+taagtattatgtgaaaaaaatgtaagaaaataggataacaaattctaagactaaatacta
+ttaataagtatagtaagtaccgtaagggaaagtatgaaaatgattattttataagcaatc
+atgaatatattatattatattaatgatgtaccttttgtataatgggtcagcaagtaatta
+atattagtaaaacaataagttataaataaatagaataatatatatatataaaaaaatata
+ttaaaatatttaattaatattaattgacccgaaagcaaacgatctaactatgataagatg
+gataaacgatcgaacaggttgatgttgcaatatcatctgattaattgtggttagtagtga
+aagacaaatctggtttgcagatagctggttttctatgaaatatatgtaagtatagccttt
+ataaataataattattatataatattatattaatattatataaagaatggtacagcaatt
+aatatatattagggaactattaaagttttattaataatattaaatctcgaaatatttaat
+tatatataataaagagtcagattatgtgcgataaggtaaataatctaaagggaaacagcc
+cagattaagatataaagttcctaataaataataagtgaaataaatattaaaatattataa
+tataatcagttaatgggtttgacaataaccattttttaatgaacatgtaacaatgcactg
+atttataataaataaaaaaaaataatatttaaaatcaaatatatatatatttgttaatag
+ataatatacggatcttaataataagaattatttaattcctaatatggaatattatatttt
+tataataaaaatataaatactgaatatctaaatattattattactttttttttaataata
+ataatatggtaatagaacatttaatgataatatatattagttattaattaatatatgtat
+taattaaatagagaatgctgacatgagtaacgaaaaaaaggtataaaccttttcacctaa
+aacataaggtttaactataaaagtacggcccctaattaaattaataagaatataaatata
+tttaagatgggataatctatattaataaaaatttatcttaaaatatatatattattaata
+attatattaattaattaataatatatataattatattatatattatatattttttatata
+atataaactaataaagatcaggaaataattaatgtataccgtaatgtagaccgactcagg
+tatgtaagtagagaatatgaaggtgaattagataattaaagggaaggaactcggcaaaga
+tagctcataagttagtcaataaagagtaataagaacaaagttgtacaactgtttactaaa
+aacaccgcactttgcagaaacgataagtttaagtataaggtgtgaactctgctccatgct
+taatatataaataaaattatttaacgataatttaattaaatttaggtaaatagcagcctt
+attatgagggttataatgtagcgaaattccttggcctataattgaggtcccgcatgaatg
+acgtaatgatacaacaactgtctcccctttaagctaagtgaaattgaaatcgtagtgaag
+atgctatgtaccttcagcaagacggaaagaccctatgcagctttactgtaattagataga
+tcgaattattgtttattatattcagcatattaagtaatcctattattaggtaatcgttta
+gatattaatgagatacttattataatataatgataattctaatcttataaataattatta
+ttattattattaataataataatatgctttcaagcatagtgataaaacatatttatatga
+taatcactttacttaatagatataattcttaagtaatatataatatatattttatatata
+ttatatataatataagagacaatctctaattggtagttttgatggggcgtcattatcagc
+aaaagtatctgaataagtccataaataaatatataaaattattgaataaaaaaaaaataa
+tatatattatatatattaattataaattgaaatatgtttatataaatttatatttattga
+atatattttagtaatagataaaaatatgtacagtaaaattgtaaggaaaacaataataac
+tttctcctctctcggtgggggttcacacctatttttaataggtgtgaacccctcttcggg
+gttccggttccctttcgggtcccggaacttaaataaaaatggaaagaattaaattaatat
+aatggtataactgtgcgataattgtaacacaaacgagtgaaacaagtacgtaagtatggc
+ataatgaacaaataacactgattgtaaaggttattgataacgaataaaagttacgctagg
+gataatttacccccttgtcccattatattgaaaaatataattattcaattaattatttaa
+ttgaagtaaattgggtgaattgcttagatatccatatagataaaaataatggacaataag
+cagcgaagcttataacaactttcatatatgtatatatacggttataagaacgttcaacga
+ctagatgatgagtggagttaacaataattcatccacgagcgcccaatgtcgaataaataa
+aatattaaataaatatcaaaggatatataaagatttttaataaatcaaaaaataaaataa
+aatgaaaaatattaaaaaaaatcaagtaataaatttaggacctaattctaaattattaaa
+agaatataaatcacaattaattgaattaaatattgaacaatttgaagcaggtattggttt
+aattttaggagatgcttatattcgtagtcgtgatgaaggtaaactatattgtatgcaatt
+tgagtgaaaaaataaggcatacatggatcatgtatgtttattatatgatcaatgagtatt
+atcacctcctcataaaaaagaaagagttaatcatttaggtaatttagtaattacctgagg
+agctcaaacttttaaacatcaagcttttaataaattagctaacttatttattgtaaataa
+taaaaaacttattcctaataatttagttgaaaattatttaacacctataagtttagcata
+ttgatttatagatgatggaggtaaatgagattataataaaaattctcttaataaaagtat
+tgtattaaatacacaaagttttacttttgaagaagtagaatatttagttaaaggtttaag
+aaataaatttcaattaaattgttatgttaaaattaataaaaataaaccaattatttatat
+tgattctataagttatttaattttttataatttaattaaaccttatttaattcctcaaat
+gatatataaattacctaatactatttcatccgaaacttttttaaaataatattcttattt
+ttattttatgatatatttcataaatatttatttatattaaattttatttgataatgatat
+agtctgaacaatatagtaatatattgaagtaattatttaaatgtaattacgataacaaaa
+aatttgaacagggtaatatagcgaaagagtagatattgtaagctatgtttgccacctcga
+tgtcgactcaacatttcctcttggttgtaaaagctaagaagggtttgactgttcgtcaat
+taaaatgttacgtgagttgggttaaatacgatgtgaatcagtatggttcctatctgctga
+aggaaatattatcaaattaaatctcattattagtacgcaaggaccataatgaatcaaccc
+atggtgtatctattgataataatataatatatttaataaaaataatactttattaatata
+ttatctatattagtttatattttaattatatattatcatagtagataagctaagttgata
+ataaataaatattgaatacatattaaatatgaagttgttttaataagataattaatctga
+taattttatactaaaattaataattataggttttatatattatttataaataaatatatt
+ataataataataattattattattaataaaaaatattaattataatattaataaaatact
+aatttatcagttatctatataatatctaatctattattctatatacttattactcctttt
+taattaaattaaaaaggggttcggttccccccccccataagtatgattataattataatt
+ataatataagggaggggtccctcactccttatggggtcccggttggaccgagactcctcc
+cttgcgggattggttcacacctttataaataaataataaataataaataaaggtgttcac
+taataaatatatatatatatatatatatattatattataatattatttaatacttaatat
+attatatattttatatttaataaataaaaaaaatattaataaataataatattaataata
+aagaaattataattaataccctctatatataattctaattaattaaattaaatatttata
+tataataatcaatatattattaatttaataattattataatagttccggggcccggccac
+gggagccggaaccccgaaaggagtttataaaagatatatttttatattatattatattat
+atttaataaatattacctttttttattattatttttatatattatataatattattaatt
+tttattataatattatttacttttttattggattatttatttatttatttatttattaat
+taattaattaaatatttattaattaatatatatattaaatattaatatttcattaaaaaa
+aagagatatatgaataatatattatgttatattatattatataattatattatttttata
+atattaataattaaaaataagaacttatttaaaaattataattatgataataaattaata
+ctttttaatttataaaaatataaatttctttacatatatatatatatatattattattat
+ttatattaatcataattttaatatttataataaatttatataaaatcaattataatatta
+tatactttttatatactttataatctttatatcttcacccccccttttttaataatatat
+tatattaaaaatataataatttatatgatttattaatactttttatataattatattatt
+atttttttttatagatgttatattattttttataataatttttttttatttaaataaaat
+ttataactccttcttaattaaagataaaaggggttccccccttaagtataagtataagta
+taagtataagtataagtataagtataagtataagtataagtataagtatagtatacgggg
+ggggggtccctcactccttcgttaatttatatatattattaataattatttaatttttat
+tatttatttatatataaaaatattctaaaattattaatatttataatagaataaatatta
+taaagtataattataaataattaattatttaaataataataatatatttattattatata
+ataaatatattataaataatagttatattagcttaattggtagagcattcgttttgtaat
+cgaaaggtttggggttcaaatccctaatataacaataataataataaaatattaaaataa
+atataatatttataaaaaatttattaatttatataaaaaatatatatataaataataatt
+ataataaaacattttataatcaataatttaataaataatcttcttattataatattatgt
+ttaaatattactctttatgaggtccaacaaactaataagatataaatatatatatattat
+ataataataataataataatatattatttaatatattatcaagaagataaatataaataa
+tattttaataattttaaataaatctaatttatatattaataatttaataatcttaatatt
+tattatcattatttcatatttatattatataaatatttatttaaataaaaaatattaaag
+agtttattttatttattataaattatttaataaaatatatataataatatatagaataaa
+gatataaataattataagtatataaagtaataaaggagatgttgttttaaggttaaacta
+ttagattgcaaatctacttattaagagttcgattctcttcatctcttaaataaataatat
+aataataaaatattatagttccggggcccggccacgggagccggaaccccggaaggagat
+aaatatatatatatttataataattatataataaaggtgaatatatttcaatggtagaaa
+atacgcttgtggtgcgttaaatctgagttcgattctcagtattcaccctataaataataa
+taataatatattttattattcttaaattttttattctttatattatatatataatattaa
+tattattactttttaataacaaaatattataattaattgatatatatatataccaaatat
+aattaattgaaattaaataataaataaaatatttacttctttattaaaattctaattaat
+tgattctttttattgaatattaaattctattataacttattaattaattaattaattaat
+tataataataataatatttattattaattattaaatatttattattatatataagattta
+attttaaatattaataaaaaaagaataaaataaaataaaatgaataatatttctttatct
+ctttcgatcggactccttcggccggactccttcggggtccgccccgcggggcgggccgga
+ctatttattattataatataatatttaatcaatagatttataatttatttaatgaatatt
+ttataaatatataaaacaattcctttttattattataaatttttcattatttatttattt
+atttatttatttattcaatatataaaaataattataaaaagattattaaaaataataatt
+taatgataaatatatattatatatattaatataaaaataataaatataaatatattatgt
+aaatattatataaatttgtatatgtatatattataataatgttatataagtaataatata
+ataaaatattttatgtaatttatatatatttataattataaaataaaaatattataaata
+ataaaattaataataataataattttaataaaataaattatatatttaattttattatga
+agtttatacttaatataaattatatttcctttataaattattaatatatcctttttaatt
+aaataaaataaaaatattataaatattaataattaattttttatttatatttatatatat
+attaaagattaaatatattattaatactaatttataatttattattaataaatagtccgg
+cccgccccctgcggggcggaccccgaaggagttcgacttaaattataatttaataatttt
+tatttattaatagtttcggggcccggccacgggagtcggaaccccgaaaggagttttatt
+attaatataaaaagagtaaggataataataaattcttttaatttatttttaataaaatat
+aattttaaaatagtttttatagtccggcccgccccgcgggggggggcggaccccgaagga
+gttcggtctggcattaattataataattatattaatattattattatttattatattata
+atatatttatttatattttataatattaataattattttatatttaataaatataatata
+tatattattttttttaataactatctaattaatagctattttggtggaattggtagacac
+gatactcttaagatgtattactttacagtatgaaggttcaagtcctttaaatagcaataa
+atatatataatatatataatatatataaatgagtcgtagactaataggtaagttaccaaa
+atttgagtttggagtttgtttgttcgaatcaaaccgattcaatattataatatatatatt
+atttatatataaatatataattatactcctatttttatattaattaattaataatatatg
+ataatataaaaattattgaattattaactcttattaataataataataatcataataata
+atatatatatatatagtatatatataaaagttttattatattatattatattatatattt
+atttatatataattcttattaattgaaaaaagaataattaataatcttattaaaaaaata
+aatactttcattttattttattttatttaatttaattataatatataaatattaaaaaaa
+ggatataagttttttataagatataatatatatatatattaaatataaagaagttaatat
+ttatattttaattataaaatgttaatactcctttggggacttattaattaaattattaat
+taataataatttatgatttataaataataaataaaggaataagtatcaattaattaatat
+attatatttaatattttatatttaatatttaatatttaatattttaagttccggggcccg
+gccacgggagccggaaccccgaaaggagtagtattaattatggatagtgagggtggattt
+aatccttttgttatgttattaattaattaattaatttatatatataaaatattttaatta
+atttttatataaatatatatatatatatatattaataatagtccggcccgccccgtgggg
+cggaccccaaaggagtaatatatattatgtataaacaatagagaatattgtttaatggta
+aaacagttgtcttttaagcaacccatgcttggttcaactccagctattctcataatatta
+tatatatatatttccctttctaaaaataataataattatatataataataatataattat
+atatatatatattataataataataataataataataataaataataataattattttta
+ttaataatattaatatattataattattaataaatattaataaaaatagctctcttagct
+taatggttaaagcataatacttctaatattaatattccatgttcaaatcatggagagagt
+aattatattatattaataatcccccccccatttttaattaaattaagaagtttaatttac
+tatttaataataaatgaaataataataatagatataagttaattggtaaactggatgtct
+tccaaacattgaatgcgagttcgattctcgctatctataattaatattaatataaattaa
+tatcctataattaattaaatacaaaattatattaaaacttatattatattatattataat
+attatattattattatataaaaatataataataataatatttaattttatttaataataa
+tattttatataataaaataatcatatttataatatttaatattaataataatttattata
+ataattctttaatatacttatttattattattttaataaataaatataattcttataaat
+atattataacaaaatatattatattttaattaaatacaatattataaatatatatatata
+tataaatatttatataaaaaaaaaataaaaatattttaataattattctttataaataaa
+taatgataataataatttataataatctccttgtggggttccggctcccgtggccgggcc
+ccggaactataatatattttaatatattttttattactcctcctttggggtccgccccgc
+gggggcggggcggactataataattttttattgataaaaaagtatatataatataattaa
+tatatttctttttatataaattataaatattattttataataaaaaaagtatatataata
+ttatatatttaataaataatataataataatataaataaatatatatatattattaatat
+attaaattttataataataattataataatagtagtaggtataaattttaataaagagtt
+ttattccaatggagtaataataataataataataaaataaaggatctgtagcttaatagt
+aaagtaccattttgtcataatggaggatgtcagtgcaaatctgattagattcgtatattt
+atacttaatataaaaaaaataaataataatcttttttattattatatttattaataataa
+attattttgttattattattaatttatattaatattttatataaattatttatttaatct
+ttcattatatatttaatatattattaatattaattaatattttataataaataaataaaa
+taaaataaatattttaatataatactccttcggggttcggtccccctcccattagtatag
+tatagggaggggtccctcactccttcggggtccccgccggggcggggacttatttttata
+tttattaataataattaatttttatataaatttattatttcttacaatatatttattact
+attattttttaataatcttatatataatatataaaatatatatatattatatatatatat
+aaatataatatatattattataaatatttataatcttattaattaattagattatattat
+attatattagatcatattatattatattatattatattatattattattattaatatttt
+tatttttattttatatttaatagtaaaaaatcataattttataatttattaattattata
+taatttcattaatatatttcttctttttatttatttatttattacttattaatagttccg
+gggcccggccacgggagccggaaccccgaaaggaaaataatataaaaaataattataatt
+tattataatttattaatttattaatttattaatttatttattaatttattaatttattta
+ttattatattttttttaataaaggaaaattaactataggtaaagtggattatttgctaag
+taattgaattgtaaattcttatgagttcgaatctcatattttccgtatatatctttaatt
+taatggtaaaatattagaatacgaatctaattatataggttcaaatcctataagatatta
+tattatattatataatattatatattaataaatattattaattaatttatttatttattt
+attattaaataaaaatatttaatagttccggggcccggccacgggagccggaaccccgaa
+aggagaataatataaaatattataattatttatatattaattattaattatttattattt
+attatataaaaagtatataattttatattttaatatagggttaattaattaattattaat
+tttttataataagataataatatattaaaaacttattataaatttataaaataatattta
+tttactttgatattatttttaatctttcattaatatatattttattataagtaataatat
+agtttaatttaattaatataaataaattacataagaataatattataataatattatata
+ttatataaagaaataataatttatatttttattttttttataaataatataaatataaat
+ataatggggttatagttaaatttggtagaacgactgcgttgcatgcatttaatatgagtt
+caagtctcattaactccaataattatattatataatatatatattaataaattatatata
+tatatatatatataaatattaaataaatattatattaataaataatataaattatctaat
+cgaaggagatatttataatataatataaatattttaataaattaataaatattatattaa
+taaataattaataaatatataaattataataaattttaatattattatataaattaatta
+aatataataattaatgaaatagaaactataattcaattggttagaatagtattttgataa
+ggtacaaatataggttcaatccctgttagtttcatattatatatcattaatatataaaat
+ataaatatatatattataataataataataataaatataaatataattatatatatatat
+atatataaataaataattatttaatttataataaatatatatagttcccgcgaagcggga
+accccataaggagttttattattaattatatttaataaatattaattattaattttatat
+ttataaataaatttattactccttcttaattaagaataaaaagggatgcggttcccatgg
+ggtcccgcactccttcggggtccgccccctcccctgcgggaggggagcggactattttat
+taaaaatattataattaaataataatataaataatttataatataataatatatacttat
+aaataatatttaaatcttattattaatttataaatcataaattattattaataaatatct
+cttttagataagataaattgaacttatatttatattatatatatatagatataaatctta
+aatagagtaaatatattataataattatataaatatatatatattatattaagataataa
+tatatatatatattaatatataaggagggattttcaatgttggtagttggagttgagctg
+taaactcaatgacttaggtcttcataggttcaattcctattcccttcataatttattatt
+aattatatattattataaatcaaatccattgaaattaatataatccaatgaataattaat
+ttaatacataatttaatatataaaattatatatatatatactttataaaaaaaaaaatta
+tataataattatattaatatatttatatatataaataaataaataaataataataattat
+aattataattataattaattaattaataaataaataataatttatattatctttataata
+tatatatatacttttataaaaaaaatatataaataattctaaaatgtatatttctccttt
+cggggttccggctcccgtggccgggccccggaactattaataaaattaataataaaataa
+ttattatctgtatttaataaatttaattatagagttatatttctatatatttatatattt
+atttatttattctccttccggaactaataaaatatataaaataagggtttttatttattt
+aattaatatatatttattcttttatataatatgtccttatagcttatcggttaaagcatc
+tcactgttaatgagaatagatgggttcaattcctattaaggacgataataatatatatat
+attttaatttatatatcatatatatatatatattaaagaaaataatataaaaagtatgta
+ttaataataataataaataaataataataaataattttattatattatattatattatat
+ttattgatatatttattgatatttattaatttaagattattcattaaatatataattatt
+aataatttaatatattttataatttttattatattttatgtaagaagaaactattttata
+tattatatatatatatataatttttataaaatgataaattttatattataaatattatta
+aaatatttttataaatatttaaattatttataaaaaggtatataataataattattaata
+ttatattatattatatatttatttatattatatataataatatatttatatatatattaa
+ttaataaattaaataagtatctatattttatattatattatattattttattttattaat
+tccggaaggagaataaaaagtattctaaagaaattatatatttattatttttattaatat
+gttataaattaataaaaaataaatatgtatatataaattatatttattatgtttaattat
+ttataatttattataatatatagtataagatatcttatttatatttatatataataaaga
+atattattaaactaacacctatattatatatattatattatataatattatatatatatt
+aattactaagaataaatttataattagataatatttatatttatttatttatttaattaa
+caaatatattaatatttttaattaattaataatacctttatatatatatatatatatata
+ttaattttaattatataattatcttttttattaataattataaatatattatatatttta
+tataataagattataattttataattattttattttttattaaaaattattattattata
+attattatattataattataaattattaaagaatatatttattaatattttaataattaa
+tatcttttatttatatttataaaataaggtataaatattgataataaagagtaaatattg
+tattaattataataataattataattaaggagcttgtatagtttaattggttaaaacatt
+tgtctcataaataaataatgtaaggttcaattccttctacaagtaataatgattataata
+tttatatatattaaaataatattaataaataattactcctcctagcaggattcacatctc
+cttcggccggactccttcggggtccgccccgcgggggcgggccggactattttattatta
+ttaaatagatgttcattaaataattataaatataatttatcttttaaatatatatatata
+atataatatttaaatatatattataaataaataaataaataattaattaataaaaacata
+taatgtatatttatctataaaaaatattaattaaattaatatattattacagttccgggg
+gccggccacgggagccggaaccccgaaggagataaataaataaataaatataaataattc
+ttcttctttaaaattaaataaaataaaataaaaaggggggcggactccttcggggtcccg
+cccccctccgcggggcggactattttatttttaaatatatattatattaataatataaat
+ataagtccccgccccggcggggaccccgaaggagtataaataaaaattaataatatatta
+tatatatattatattaataataataataataataataataataaataataactccttgct
+tcatacctttataaataaggtaatcactaatatattataataataaaaattatatatatt
+atatataatctaaatattatatattttaataaatattaatatatatgatatgaatattat
+tagtttttgggaagcgggaatcccgtaaggagtgagggacccctccctaacgggaggagg
+accgaaggagttttagtatttttttttttttaataaaatatatatttatatgattaataa
+tattatatatattatttataaaaataatatataattttaattatttttaataaaaaaagg
+tggggttgataatataatataatattttttattttaatttataatatataataataaatt
+ataaataaattttaattaaaagtagtattaacatattataaatagacaaaagagtctaaa
+ggttaagatttattaaaatgttagatttattaagattacaattaacaacattcattatga
+atgatgtaccaacaccttatgcatgttattttcaggattcagcaacaccaaatcaagaag
+gtattttagaattacatgataatattatgttttatttattagttattttaggtttagtat
+cttgaatgttatatacaattgttataacatattcaaaaaatcctattgcatataaatata
+ttaaacatggacaaactattgaagttatttgaacaatttttccagctgtaattttattaa
+ttattgcttttccttcatttattttattatatttatgtgatgaagttatttcaccagcta
+taactattaaagctattggatatcaatgatattgaaaatatgaatattcagattttatta
+atgatagtggtgaaactgttgaatttgaatcatatgttattcctgatgaattattagaag
+aaggtcaattaagattattagatactgatacttctatagttgtacctgtagatacacata
+ttagattcgttgtaacagctgctgatgttattcatgattttgctattccaagtttaggta
+ttaaagttgatgctactcctggtagattaaatcaagtttctgctttaattcaaagagaag
+gtgtcttctatggagcatgttctgagttgtgtgggacaggtcatgcaaatatgccaatta
+agatcgaagcagtatcattacctaaatttttggaatgattaaatgaacaataattaatat
+ttacttattattaatatttttaattattaaaaataataataataataataattataataa
+tattcttaaatataataaagatatagatttatattctattcaatcaccttatattaaaaa
+tataaatattattaaaagaggttatcatacttctttaaataataaattaattattgttca
+aaaagataataaaaataataataagaataatttagaaatagataatttttataaatgatt
+agtaggatttacagatggagatggtagtttttatattaaattaaatgataaaaaatattt
+aagatttttttatggttttagaatacatattgatgataaagcatgtttagaaaagattag
+aaatatattaaatataccttctaattttgaagaactacttaaaacaattatattagtaaa
+ttcacaaaagaaatggttatattctaatattgtaactatttttgataagtatccttgttt
+aacaattaaatattatagttattataaatgaaaaatagctataattaataatttaaatgg
+tatatcttataataataaagatttattaaatattaaaaatacaattaataattatgaagt
+tatacctaatttaaaaattccatatgataaaataaatgattattgaattttaggttttat
+tgaagctgaaggttcatttgatctatctccaaaacgtaatatttgtggttttaatgtttc
+acaacataaacgtagtattaatacattaaaagctattaaatcttatgtattaaataattg
+aaaaccaattgataatacaccattattaattaaaaataaattattaaaagattgagattc
+atctattaaattaactaaacctgataaaaatggagttattaaattagaatttaatagaat
+agattttttatattatgttattttacctaaattatattcattaaaatgatatagtcgtaa
+agaaattgatttccaattatgaaaaacacttatagaaatctatataaaaggtttacataa
+tacacttaaaggttctaatttattaaaattaattaataataatattaataaaaaaagata
+ttattctaattataatatttctcctttcggggttccggctcccgtggccgggccccggaa
+ctaaaaatattattgatgatgtattaaatataaatcttatctataattataaattaccat
+atcgtataaatagtgatattcaacgtttaaattctataaataataataatactaaattta
+ttaatgttggagtatttgtttatgatttaaataatacattaattataacatttactggtt
+atagaccagcagctctttactttaattgttctccttttcggggtcccgactggggccggg
+actaaacatgaaattgctaaatatattaaaaatggtaatgtatttataaataaatatatt
+ttaaaaaatattttattagattaattattatttttacttcttcttaaaattaaaaaagga
+gacttttttatatttatataaattatatataaattattcttttattataaatatataaaa
+ttattttcttttaattatttttataattaattaattcttcatggctatagccataacttt
+taataatattcttttattctttattattatatatatatatatttattatttattattata
+gaatttatatttataaaaatattaatattttatttaaaataaataatgattaatttataa
+aatatatattaattaagtttcgggtcccggctacgggacccggaacccccgagaggagtt
+attatatttataattaaatctttaaataatatatcttaaattattatattgatattaata
+ttatattgatattaatattaaatatatatttaatatttagcttattattttataaaatta
+tatttatatattataatataattaaatatattataaatttaataatttaataaaaatatt
+ctttttataattattataataattaaataaataataataataagaataattaatgtataa
+tttttttataaatattatatatttttatattaatagttccggggcccggccacgggagcc
+ggaaccccgaaaggagaaatattaataaaataaaataaaattataatataattaaattat
+aagaattatatttactccttttataatttatatttataatataatataatataaaataaa
+tataatataatataaaataaatataatgtaataggtattcactcctctttggggttccga
+tcccccatacggatacggatacggatacgaatacggatacggatacggatacggggggcc
+gtcccccagaacttaatattatatcttaaataattaatataaatataatatattatttaa
+taataataataaataaataaataaataaataaataaattaaataaataataatattatta
+taattactttttaataaataatattaatataatattatattagtattataaatagacttt
+ttattattttatatataatatagtccggcccgcccccgcggggcggaccccgaaggagta
+atatattatataattattatttttaattataaataaaatataattattatttattatata
+atttatataaatatatatatatatttattatatatataaatataaatataaatataataa
+ttaataatattaaagttttatatatattaatatattataaaaggtttatatatatatata
+ataagataagtaataaattaattaattaataatataaaaatatatattatatattatgtt
+ttatttatatatatatatatattatgtattattatataaatatatatatatattatatta
+taagtaataataagtattatattatatatagcttttatagcttagtggtaaagcgataaa
+ttgaagatttatttacatgtagttcgattctcattaagggcaataataataatatattaa
+ttaataattaatttataataaatatattataataattaatatatatatatataatatatt
+taatacaaagaaaatatatattatatctcttatttatttatttattaatattttaataaa
+tataatattataaaaaaaagtttatatatttagttccggggcccggccacgggagccgga
+accccggtaggagaaatataaatataaatataaatataatataagtttggtattcattta
+attatattatttaattaaaaatattctaaataagaataaatatcaataaaggagttataa
+atatatatatatattaatatatatataaaaatatatattattattagttcccgctttgcg
+ggaaccccgtaaggagtgagggaccccatgggaaccgaacccctatttaagaaggagttt
+tattataataaaatttatatatatttaatatataattataaaaatattatataataaata
+ataaataattattaataataaataaatataataataatattataataaatttataaatga
+ttataataaatttatattaattttttattttgtaaatactaagatttgaacttagataat
+atgcacctaaaaacatacattttaccattaaattatatttaccttattaattatataaaa
+tttattaaatatataatatattaattatataaaaattattaaataaatatataatatatt
+atatataatttataatatatatattataaatattattatatataaaatataatatactac
+ttataaaaatatatatatatatataaatatatatataaataaatattttatatattaaat
+taaataattattaataaatttaattataaagtataattttcaataggaatatttataaga
+ttataataattatatgaattattataattatatatatataaataaataaaataataatta
+taataattaataagagttttggatatatatctgtggagtatatattttataaaggagatt
+agcttaattggtatagcattcgttttacacacgaaagattataggttcgaaccctatatt
+tcctaaatctagatataatattatatctatcttaatataataatatttatttattaaata
+aaaaaaaaataaataatattaattaatataagattcttttttaattataataataaataa
+ataaaaagaagatattatcaatgatttatattaataataaatataaataataaaaaatat
+atataatataatataataaatatatttcctttaatattaataaattaataataataataa
+taataataataaaatatttaaataaattatattcaatacaaattaattatttatattatt
+aataattgaataaataatccggtcgaaagagatattaattcgattatattatttatttaa
+ttatatttaatttaaatatataaattaatatatatatattgaattatatataaatttatt
+ttataattttataaataatatattattataaatatttaatataatttatattattattaa
+ataaaagatttattaaattaatattattatttaattttattatatagtttaagggataat
+attttattaatattttttttatttatttatttaattatattatatatataatatatatat
+aacaataaatttatgacacatttagaaagaagtagacatcaacaacatccatttcatatg
+gttatgccttcaccatgacctattgtagtatcatttgcattattatcattagcattatca
+ctagcattaacaatgcatggttatattggtaatatgaatatggtatatttagcattattt
+gtattattaacaagttctattttatgatttagagatattgtagctgaagctacatattta
+ggtgatcatactatagcagtaagaaaaggtattaatttaggtttcttaatgtttgtatta
+tctgaagtattaatctttgctggtttattctgagcttatttccattcagctatgagtcct
+gatgtactattaggtgcatgttgaccacccgtaggtattgaagctgtacaacctaccgaa
+ttacctttattaaatactattatcttattatcttctggtgctactgtaacttatagtcat
+catgccttaatcgcaggtaatagaaataaagccttatcaggtttattaattacattctga
+ttaattgttatttttgttacttgtcaatatattgaatatactaatgctgcattcactatc
+tctgatggtgtttatggttcagtattctatgctggtacaggattacatttcttacatatg
+gtaatgttagcagctatgttaggtgttaattattgaagaatgagaaattatcatttaaca
+gctggacatcatgttggatatgaaacaactattatttatctacatgttttagatgttatc
+tgattatttttatacgtagtcttctactgatgaggagtctaaggctatagaattatatat
+ctaaatgattaatatatatattattaataattaacaataattaatatattataatttata
+tatatatattttatattattataataatattcttacaaatataattattatatattattc
+cttcaaaactcctaacggggttcccgcgaagcgggaactaataataatataatcattata
+ctcttttttcatttaccttttataaagataattaataaatttatttaatatttataaaaa
+aaaaaatataatattaatataatataatataataatgtaattatttatatttttatattc
+cttcgaggtcaccgcctcacctccagcgggacttttttaatatgatataatataatataa
+atattattaatttaactaatatataaattcatatatatatatatattattaatattattt
+tataaaaaatattttttatttgattattattaaatattatatagttccggggcccggcca
+cgggagccggaaccccgaaaggagaaatattaatatattataaatatactatttatgtaa
+ttattttttgaagtgagcacctattttatatatattttatatatattttattatatttta
+ttaaaaataggtgtgaacctccatgagagaggaatgaatacctattttataaagtatatt
+ttatattctatatattataaatatgaaccaaaaaaaggagtttaaaatttaattaaattt
+aattaattgaatttctttattattattatcataattattaaaccctttattaatataata
+atatattatttattatcaaaatacctaccctttttataatttatatctttaataatataa
+ttaaatataaaatgtttattaaatattatataaaaataaaaataaaaatatatatatata
+tataaatgataaataataaggaattcacacttatataaatttaaatataaagtcccaaaa
+gaagtattcattaaataaattatcattaattaattataataaacttatttaatattatta
+aagattaatttataataataattattattattattattaatattaataaaatatataaat
+aattaaatagttcatatattaaaaagaattagaattaaactttaataagtgtatttaata
+tatagaatattaatagaatatttattctatttatatatatatttatatatatatatatta
+aataatattatttatattatattttatatatatattattaatataaaaagtatattatat
+gtattatatatattatatattatatatttaataatatattactcctttggggtgggtccg
+ccccacggggcgggccggactattataattaataattttataaagttccggggcccggcc
+acgggagccggaaccccgaaaggagaataaataattatatatcttcttcttaattaaatt
+aaattaaattaaattaaattaaattaaattaaattaaaaaggggttcggtccccctccct
+aacgggagggggtccctcactcattcaaactataatttaatatattatgatattatttat
+aatttataatataatgtataatattatattataaatattatataaaaataaaatgatata
+tataataataataataataataataaaaaaatagaaaagaataatttttattattttagt
+atatataagaatttaataagttatattattgcggacaccgttacgcggagtggggactat
+tatattttacctatatatattaatattattataatttccttctttaaaagaaaaaaggaa
+ttcgagaacttattattatattaatatattaataataaataataataaataataaaaaag
+taaataattataaattatataaaaatataattttattattaagaaaggagtttaaatata
+aaatataatattatcattaagttctaataaaggtatataatgaagatctattagaaccta
+aaaagaatattaatatatctattataaaataataataataaatataaatataaaaataaa
+ttgtaatatttataaataataataaaaaataaataaggaatatattaattattaataata
+aataaattatattaaaatataatattattattaaattaaagaattatattaaatatattt
+attaaaattttataaataagttaatattttattaaataatatttataaataataaaaaaa
+aataagtatataattattaatatattaatttattatgttatatatttatatatttcaaat
+atataagtaatagggggagggggtgggtgataataaccagaatattaaataaatacagag
+cacacatttgttaatatttaataatataatcaataaatatattataataatataatataa
+ttaataatagatataaagtataaacaatataataaattatataaaataaatataaattaa
+aaataataaccaaataattaatataataaatgataaacaagaagatatccgggtcccaat
+aataattattattgaaaataataattgggacccccacaatagaataaaaaataaaaagaa
+ttaataatatataaataatataaaatatattatatatatatataatatatatatatatat
+aataaaaaaaaatatataatataatatatatatataaaataataaattatatatatatat
+ataaaataataaaaaataataatcatatgaattttataaatataattattattaataata
+ataataataataataaagtccggtccgccccgcggagggggcggacccccgaaggagtgc
+gggaccccgtgggaaccgcatccctttttattcttaattaagaaggagataataatttat
+aaaaattaatatttattttatgtaatattaatattaatattaatataatataatataata
+taatacggattaaatattaccagttgttcacaggtaatataaaatcctattgtttcacct
+attattaattaatagttccggggcccggccacgggagccggaaccccgaaaggagaataa
+gtatatataataaaatttaataaaaaaaaataattatataataaatatatatattataat
+attatataaatataaaatataattgatattaacattatataattaataatataatcaaat
+aatataaatataatataaaaagttttaattattaaaattatataaatattatttaataaa
+aataaaaataataataataataataataataaagtccggtccgccccctccgcggagggg
+gcggaccccgaaagagtgagggacccccccgtatacttacggggggagaaccgaacccct
+ttttttatttaaagaaggagataaatatttatatctttatttataattatatataaataa
+aagtttattaaaatttataataataatataaaaaagtatataataaatttattataaata
+aataaatatttagtaataatatttaataaaattataaatattataaataaaatattaata
+ataaataataaatatataatataatataatataataaattaataacaataagatatccgg
+gtcccctaaataattattatataaaataataattgggacccatacatataaatataaaat
+attttaatatttatatataaataataataatatatatttatattatattataatataacc
+ctttccaattaatattaatattaatattaattacttccttaaaaaaataataattaatta
+attgatttttatattaatataaaaaagttaatatatatatttatatataaataatataaa
+ttaatataaagataataagtccccgctttcagcgcagtgagggaccccctcccgtaaata
+tacgggaggggagaccgaaccccaaaggaataataaataatagtatgtatttaaataaat
+atttaatatactatttttttttattatttttataatatatttataataatatatttaatt
+ataatttataaaaaagagatataatattttattatatataatattaatataatacaaatt
+aacattatttaattattattaataatatttaactttattattatcttctacggttggact
+ccttcttaaaaaggggttcggtccccctcccattagggaggggtccctcactccttcggg
+gtccgcgccccccgcgggggggggcggaccggactattattactatttatttattaataa
+taaataataaattataaagtcactgaaagagtgaggaattttccttttcccaagggaaaa
+ccccaaaggataatataaatattataaaatttttattaaataatataaaattcaataaaa
+taattttaattaattaattaattaattaatataaaaataaatatttttaattaatattaa
+tattaatagttccggggcccggccacgggagccggaaccccggaaggagaaatataaata
+taatagtatagtatataggaagttaataataatataaatattatataatatatatatgta
+tatatattatattatataattaattttctccttttgtatttacatcttaataaaatataa
+aatataaaatgttattaacaataaaaattattaatctttataatattaataatagtaaat
+ttatttatatatctcctttaggatggactccttcggccggactccttcggggtccgcccc
+gcgggggcgggccggactatttttattttttttttaaaaaatattaaatattataaatat
+attataaatatattataaatatgttataaatatattataaatagaatataatataatatt
+atatattataatgataaagattatatatattttctttttttttttatttattatttttaa
+taagtaaaaattatattatatatatatatatattagattttataagtaatataatataag
+tattaatatataaatgcaatatgatgtaattggttaacattttagggtcatgacctaatt
+atatacgttcaaatcgtattattgctaataaattaatatataatatttataaaaaagtat
+aataaaatatattataagaagaatatattatataataattatattaataatattaataaa
+taatatataaataattataaaaaagtatataatattaatcaattaattaattaataaata
+taaataatatattaatttttaattaatttgaataagatatttatattattaataggaaag
+tcataaatatataaattatattatataattaatataataataaaataaattatatatttt
+atttataatattatttctttataagataaaatattatctgatgaataattagattgaata
+atatttataaagaaatatatataaaaagtcattatataaatttaattataatttaaataa
+attttatataaattaatataatattaataaagtaattagtataaataaataatatgaaaa
+taaaacttaataaatatataaatatagtccggcccgcccccccgcggcgggcggaccccg
+aaggagtgagggacccctccctaatgggagggggaccgaacccctttttaagaaggagtc
+catatatatatattaataaaaaaaagtaatatatatatatatattggaatagttatatta
+ttatacagaaatatgcttaattataatataatatccata
diff --git a/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai
new file mode 100644
index 00000000000..7e31b31b454
--- /dev/null
+++ b/src/test/resources/filediagnostics/mitoCorrupt.bug8768.fa.fai
@@ -0,0 +1 @@
+Mito 85779 55 60 61
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram
new file mode 100644
index 00000000000..283695852f4
Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.bug8768.cram differ
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv
new file mode 100644
index 00000000000..c14f54dc9b2
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.tsv
@@ -0,0 +1,7 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#Bad containers:
+thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 2 1 0.8787713064318008 1 40487
+thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 3 1 0.8772071178490157 40388 35381
+#Good containers:
+thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 1 0 0.0 1 59
+thisFileIsCorruptMito.2BadContainers.bug8768.cram Mito 4 0 0.00801308815760323 75661 10119
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt
new file mode 100644
index 00000000000..0a03b671dbb
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.2BadContainers.false.bug8768.txt
@@ -0,0 +1,18 @@
+CRAM File Name: thisFileIsCorruptMito.2BadContainers.bug8768.cram
+CRAM Version: 3.0
+CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE=
+
+**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:
+
+Average mismatch rate for presumed good containers: 0.004007
+Average mismatch rate for suspected bad containers: 0.877989
+
+The average base mismatch rate of 0.877989 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt.
+
+Suspected CORRUPT Containers:
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.878771/1047747
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram
new file mode 100644
index 00000000000..3ff3c35920f
Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.bug8768.cram differ
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv
new file mode 100644
index 00000000000..7d2b1e2fd9e
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.tsv
@@ -0,0 +1,8 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#Bad containers:
+thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 2 1 0.0 1 59
+thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 3 1 0.8787713064318008 1 40487
+thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 4 1 0.8772071178490157 40388 35381
+#Good containers:
+thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 1 0 0.0 1 59
+thisFileIsCorruptMito.3BadContainers.bug8768.cram Mito 5 0 0.00801308815760323 75661 10119
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt
new file mode 100644
index 00000000000..8e803fc48a2
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.3BadContainers.false.bug8768.txt
@@ -0,0 +1,19 @@
+CRAM File Name: thisFileIsCorruptMito.3BadContainers.bug8768.cram
+CRAM Version: 3.0
+CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE=
+
+**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:
+
+Average mismatch rate for presumed good containers: 0.004007
+Average mismatch rate for suspected bad containers: 0.585326
+
+The average base mismatch rate of 0.585326 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt.
+
+Suspected CORRUPT Containers:
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.878771/1047747
+ Ordinal: 4 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=59) Mismatch Rate/Count: 0.000000/1080000
+ Ordinal: 5 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram
new file mode 100644
index 00000000000..cc0abe59318
Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram differ
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai
new file mode 100644
index 00000000000..379a265705e
Binary files /dev/null and b/src/test/resources/filediagnostics/thisFileIsCorruptMito.bug8768.cram.bai differ
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv
new file mode 100644
index 00000000000..3a5d6b3fb06
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.tsv
@@ -0,0 +1,6 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#Bad containers:
+thisFileIsCorruptMito.bug8768.cram Mito 2 1 0.8772071178490157 40388 35381
+#Good containers:
+thisFileIsCorruptMito.bug8768.cram Mito 1 0 0.008827512748783819 1 40487
+thisFileIsCorruptMito.bug8768.cram Mito 3 0 0.00801308815760323 75661 10119
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt
new file mode 100644
index 00000000000..1e744899945
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.false.bug8768.txt
@@ -0,0 +1,17 @@
+CRAM File Name: thisFileIsCorruptMito.bug8768.cram
+CRAM Version: 3.0
+CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE=
+
+**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:
+
+Average mismatch rate for presumed good containers: 0.008420
+Average mismatch rate for suspected bad containers: 0.877207
+
+The average base mismatch rate of 0.877207 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt.
+
+Suspected CORRUPT Containers:
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.008828/1047747
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv
new file mode 100644
index 00000000000..3a5d6b3fb06
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.tsv
@@ -0,0 +1,6 @@
+file_name contig_name container_ordinal container_is_bad mismatch_rate alignment_start alignment_span
+#Bad containers:
+thisFileIsCorruptMito.bug8768.cram Mito 2 1 0.8772071178490157 40388 35381
+#Good containers:
+thisFileIsCorruptMito.bug8768.cram Mito 1 0 0.008827512748783819 1 40487
+thisFileIsCorruptMito.bug8768.cram Mito 3 0 0.00801308815760323 75661 10119
diff --git a/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt
new file mode 100644
index 00000000000..1e744899945
--- /dev/null
+++ b/src/test/resources/filediagnostics/thisFileIsCorruptMito.true.bug8768.txt
@@ -0,0 +1,17 @@
+CRAM File Name: thisFileIsCorruptMito.bug8768.cram
+CRAM Version: 3.0
+CRAM ID Contents: ZmlsZTovLy9Vc2Vycy9jbm9ybWE=
+
+**********************!!!!!Possible CORRUPT CONTAINERS DETECTED!!!!!**********************:
+
+Average mismatch rate for presumed good containers: 0.008420
+Average mismatch rate for suspected bad containers: 0.877207
+
+The average base mismatch rate of 0.877207 for suspected bad containers exceeds the threshold rate of 0.05, and indicates this file may be corrupt.
+
+Suspected CORRUPT Containers:
+ Ordinal: 2 (sequenceId=SINGLE_REFERENCE: 0, start=40388, span=35381) Mismatch Rate/Count: 0.877207/1031379
+
+Presumed GOOD Containers:
+ Ordinal: 1 (sequenceId=SINGLE_REFERENCE: 0, start=1, span=40487) Mismatch Rate/Count: 0.008828/1047747
+ Ordinal: 3 (sequenceId=SINGLE_REFERENCE: 0, start=75661, span=10119) Mismatch Rate/Count: 0.008013/293395