diff options
author | Ningsheng Jian <ningsheng.jian@linaro.org> | 2017-11-07 18:38:01 +0800 |
---|---|---|
committer | Ningsheng Jian <ningsheng.jian@linaro.org> | 2017-11-16 09:46:55 +0800 |
commit | e715fe64e96acb6131af937d0c8bba2537ea13f4 (patch) | |
tree | 702384eb404c3fd6acbbc3321261847e9fc27398 /src/main/java/org/linaro/benchmarks/benchmarksgame | |
parent | 3811e9930ddb1d2b3a1463ad6c876af324331335 (diff) |
1. Port benchmark cases from art-testing.
2. Add some more benchmarks for basic OPs.
3. Fix some jmh result variance.
Signed-off-by: Zhongwei Yao <zhongwei.yao@linaro.org>
Signed-off-by: Yang Zhang <yang.zhang@linaro.org>
Signed-off-by: Ningsheng Jian <ningsheng.jian@linaro.org>
Change-Id: I514658696b63e468158325be3b84494553773705
Diffstat (limited to 'src/main/java/org/linaro/benchmarks/benchmarksgame')
15 files changed, 5610 insertions, 0 deletions
diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/LICENSE b/src/main/java/org/linaro/benchmarks/benchmarksgame/LICENSE new file mode 100644 index 0000000..330d9e7 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/LICENSE @@ -0,0 +1,34 @@ +Revised BSD license + +This is a specific instance of the Open Source Initiative (OSI) BSD license +template http://www.opensource.org/licenses/bsd-license.php + + +Copyright © 2004-2008 Brent Fulgham, 2005-2015 Isaac Gouy +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of "The Computer Language Benchmarks Game" nor the name of + of "The Computer Language Shootout Benchmarks" nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/binarytrees.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/binarytrees.java new file mode 100644 index 0000000..8ce6f1c --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/binarytrees.java @@ -0,0 +1,102 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `binarytrees/binarytrees.java-2.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Jarkko Miettinen + */ + +/* + * Description: Allocate and deallocate many many binary trees. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.util.ArrayList; +import java.util.Date; +import java.util.SortedSet; +import java.util.TreeSet; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class binarytrees { + + private static final int PREDEFINED_DEPTH = 10; + private final static int minDepth = 4; + + public int old_main(){ + int n = 0; + int maxDepth = (minDepth + 2 > PREDEFINED_DEPTH) ? minDepth + 2 : PREDEFINED_DEPTH; + int stretchDepth = maxDepth + 1; + + int check = (TreeNode.bottomUpTree(0,stretchDepth)).itemCheck(); + + TreeNode longLivedTree = TreeNode.bottomUpTree(0,maxDepth); + + for (int depth=minDepth; depth<=maxDepth; depth+=2){ + int iterations = 1 << (maxDepth - depth + minDepth); + check = 0; + + for (int i=1; i<=iterations; i++){ + check += (TreeNode.bottomUpTree(i,depth)).itemCheck(); + check += (TreeNode.bottomUpTree(-i,depth)).itemCheck(); + } + } + return check; + } + + + private static class TreeNode + { + private TreeNode left, right; + private int item; + + TreeNode(int item){ + this.item = item; + } + + private static TreeNode bottomUpTree(int item, int depth){ + if (depth>0){ + return new TreeNode( + bottomUpTree(2*item-1, depth-1) + , bottomUpTree(2*item, depth-1) + , item + ); + } + else { + return new TreeNode(item); + } + } + + TreeNode(TreeNode left, TreeNode right, int item){ + this.left = left; + this.right = right; + this.item = item; + } + + private int itemCheck(){ + // if necessary deallocate here + if (left==null) return item; + else return item + left.itemCheck() - right.itemCheck(); + } + } + // CHECKSTYLE.ON: .* + @Benchmark + public void jmhTimeBinaryTrees() { + old_main(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/chameneosredux.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/chameneosredux.java new file mode 100644 index 0000000..6733d6b --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/chameneosredux.java @@ -0,0 +1,253 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `chameneosredux/chameneosredux.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Michael Barker + */ + +/* + * Description: Symmetrical thread rendezvous requests. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + + +/** + * This implementation uses the java.util.concurrent.atomic library + * i.e. (compare and set) to avoid locking. Real threads are used, but + * are set up as a thread pool and meeting requests are pushed onto a + * queue that feeds the thread pool. + */ +// CHECKSTYLE.OFF: .* +public class chameneosredux { + + enum Colour { + blue, + red, + yellow + } + + private static Colour doCompliment(final Colour c1, final Colour c2) { + switch (c1) { + case blue: + switch (c2) { + case blue: + return Colour.blue; + case red: + return Colour.yellow; + case yellow: + return Colour.red; + } + case red: + switch (c2) { + case blue: + return Colour.yellow; + case red: + return Colour.red; + case yellow: + return Colour.blue; + } + case yellow: + switch (c2) { + case blue: + return Colour.red; + case red: + return Colour.blue; + case yellow: + return Colour.yellow; + } + } + + throw new RuntimeException("Error"); + } + + static final class MeetingPlace { + + private final AtomicInteger meetingsLeft; + private final AtomicReference<Creature> creatureRef = new AtomicReference<Creature>(); + + public MeetingPlace(final int meetings) { + meetingsLeft = new AtomicInteger(meetings); + } + + public void meet(final Creature incoming) { + Colour newColour = null; + Creature first = null; + Creature next = null; + do { + first = creatureRef.get(); + next = incoming; + if (first != null) { + newColour = doCompliment(incoming.colour, first.colour); + next = null; + } + } while (!creatureRef.compareAndSet(first, next)); + + if (first != null) { + final int meetings = meetingsLeft.decrementAndGet(); + if (meetings >= 0) { + first.setColour(incoming.id, newColour); + incoming.setColour(first.id, newColour); + } else { + first.complete(); + incoming.complete(); + } + } + } + } + + static final class Dispatcher implements Runnable { + private final BlockingQueue<Creature> q; + + public Dispatcher(final BlockingQueue<Creature> q) { + this.q = q; + } + + public void run() { + try { + while (true) { + q.take().run(); + } + } catch (final InterruptedException e) { + } + } + } + + static final class Creature { + + private final int id; + private final MeetingPlace place; + private final BlockingQueue<Creature> q; + private final CountDownLatch latch; + private int count = 0; + private int sameCount = 0; + private Colour colour; + + public Creature(final MeetingPlace place, final Colour colour, + final BlockingQueue<Creature> q, final CountDownLatch latch) { + this.id = System.identityHashCode(this); + this.place = place; + this.latch = latch; + this.colour = colour; + this.q = q; + } + + public void complete() { + latch.countDown(); + } + + public void setColour(final int id, final Colour newColour) { + this.colour = newColour; + count++; + sameCount += 1 ^ Integer.signum(abs(this.id - id)); + q.add(this); + } + + private int abs(final int x) { + final int y = x >> 31; + return (x ^ y) - y; + } + + public void run() { + place.meet(this); + } + + public int getCount() { + return count; + } + + @Override + public String toString() { + return String.valueOf(count) + getNumber(sameCount); + } + } + + private int run(final int n, final Colour...colours) { + final int len = colours.length; + final MeetingPlace place = new MeetingPlace(n); + final Creature[] creatures = new Creature[len]; + final BlockingQueue<Creature> q = new ArrayBlockingQueue<Creature>(len); + final CountDownLatch latch = new CountDownLatch(len - 1); + + for (int i = 0; i < len; i++) { + creatures[i] = new Creature(place, colours[i], q, latch); + } + + final Thread[] ts = new Thread[len]; + for (int i = 0, h = ts.length; i < h; i++) { + ts[i] = new Thread(new Dispatcher(q)); + ts[i].setDaemon(true); + ts[i].start(); + } + + for (final Creature creature : creatures) { + q.add(creature); + } + + try { + latch.await(); + for (final Thread t : ts) { + t.interrupt(); + } + for (final Thread t : ts) { + t.join(); + } + } catch (final InterruptedException e1) { + System.err.println("Existing with error: " + e1); + } + + int total = 0; + for (final Creature creature : creatures) { + total += creature.getCount(); + } + return total; + } + + private static final String[] NUMBERS = { + "zero", "one", "two", "three", "four", "five", + "six", "seven", "eight", "nine" + }; + + private static String getNumber(final int n) { + final StringBuilder sb = new StringBuilder(); + final String nStr = String.valueOf(n); + for (int i = 0; i < nStr.length(); i++) { + sb.append(" "); + sb.append(NUMBERS[Character.getNumericValue(nStr.charAt(i))]); + } + + return sb.toString(); + } + // CHECKSTYLE.ON: .* + + private static final int PREDEFINED_N = 600; + + @Benchmark + public void jmhTimeChameneosRedux() { + run(PREDEFINED_N, Colour.blue, Colour.red, Colour.yellow); + run(PREDEFINED_N, Colour.blue, Colour.red, Colour.yellow, Colour.red, Colour.yellow, + Colour.blue, Colour.red, Colour.yellow, Colour.red, Colour.blue); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/fannkuchredux.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/fannkuchredux.java new file mode 100644 index 0000000..6a644c1 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/fannkuchredux.java @@ -0,0 +1,94 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `fannkuchredux/fannkuchredux.java-2.java` from the + * archive available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause). + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Isaac Gouy + * converted to Java by Oleg Mazurov + */ + +/* + * Description: Indexed-access to tiny integer-sequence. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + + // CHECKSTYLE.OFF: .* +public class fannkuchredux +{ + public int fannkuch(int n) { + int[] perm = new int[n]; + int[] perm1 = new int[n]; + int[] count = new int[n]; + int maxFlipsCount = 0; + int permCount = 0; + int checksum = 0; + + for(int i=0; i<n; i++) perm1[i] = i; + int r = n; + + while (true) { + + while (r != 1){ count[r-1] = r; r--; } + + for(int i=0; i<n; i++) perm[i] = perm1[i]; + int flipsCount = 0; + int k; + + while ( !((k=perm[0]) == 0) ) { + int k2 = (k+1) >> 1; + for(int i=0; i<k2; i++) { + int temp = perm[i]; perm[i] = perm[k-i]; perm[k-i] = temp; + } + flipsCount++; + } + + maxFlipsCount = Math.max(maxFlipsCount, flipsCount); + checksum += permCount%2 == 0 ? flipsCount : -flipsCount; + + // Use incremental change to generate another permutation + while (true) { + if (r == n) { + return maxFlipsCount; + } + int perm0 = perm1[0]; + int i = 0; + while (i < r) { + int j = i + 1; + perm1[i] = perm1[j]; + i = j; + } + perm1[r] = perm0; + + count[r] = count[r] - 1; + if (count[r] > 0) break; + r++; + } + + permCount++; + } + } + // CHECKSTYLE.ON: .* + + private static final int PREDEFINED_N_PANCAKES = 7; + + @Benchmark + public void jmhTimeFannkuchRedux() { + fannkuch(PREDEFINED_N_PANCAKES); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/fasta.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/fasta.java new file mode 100644 index 0000000..f662bd3 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/fasta.java @@ -0,0 +1,173 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and modified + * to fit the benchmarking framework. + * The original benchmarks printed long strings to the stdout. This print was removed to fit the + * framework. These action can cause difference in behaviour of the original and changed benchmarks; + * it hasn't been estimated yet. + * + * The original file is `fasta/fasta.java-2.java` from the archive available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause). + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * modified by Mehmet D. AKIN + * + */ + +/* + * Description: Generate and write random DNA sequences. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class fasta { + public static final int IM = 139968; + public static final int IA = 3877; + public static final int IC = 29573; + public static int last = 42; + + public static final int LINE_LENGTH = 60; + + // pseudo-random number generator + public static final double random(double max) { + last = (last * IA + IC) % IM; + return max * last / IM; + } + + // Weighted selection from alphabet + public static String ALU = + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" + + "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" + + "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" + + "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" + + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" + + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" + + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; + public static byte[] ALUB = ALU.getBytes(); + + public static final frequency[] IUB = new frequency[] { + new frequency('a', 0.27), + new frequency('c', 0.12), + new frequency('g', 0.12), + new frequency('t', 0.27), + + new frequency('B', 0.02), + new frequency('D', 0.02), + new frequency('H', 0.02), + new frequency('K', 0.02), + new frequency('M', 0.02), + new frequency('N', 0.02), + new frequency('R', 0.02), + new frequency('S', 0.02), + new frequency('V', 0.02), + new frequency('W', 0.02), + new frequency('Y', 0.02) }; + + public static final frequency[] HomoSapiens = new frequency[] { + new frequency('a', 0.3029549426680d), + new frequency('c', 0.1979883004921d), + new frequency('g', 0.1975473066391d), + new frequency('t', 0.3015094502008d)}; + + public static void makeCumulative(frequency[] a) { + double cp = 0.0; + for (int i = 0; i < a.length; i++) { + cp += a[i].p; + a[i].p = cp; + } + } + + // naive + public final static byte selectRandom(frequency[] a) { + int len = a.length; + double r = random(1.0); + for (int i = 0; i < len; i++) + if (r < a[i].p) + return a[i].c; + return a[len - 1].c; + } + + static int BUFFER_SIZE = 1024; + static int index = 0; + static byte[] bbuffer = new byte[BUFFER_SIZE]; + final void makeRandomFasta(String id, String desc,frequency[] a, int n) + { + index = 0; + int m = 0; + String descStr = ">" + id + " " + desc + '\n'; + while (n > 0) { + if (n < LINE_LENGTH) m = n; else m = LINE_LENGTH; + if(BUFFER_SIZE - index < m){ + index = 0; + } + for (int i = 0; i < m; i++) { + bbuffer[index++] = selectRandom(a); + } + bbuffer[index++] = '\n'; + n -= LINE_LENGTH; + } + } + + final void makeRepeatFasta(String id, String desc, String alu, int n) + { + index = 0; + int m = 0; + int k = 0; + int kn = ALUB.length; + String descStr = ">" + id + " " + desc + '\n'; + while (n > 0) { + if (n < LINE_LENGTH) m = n; else m = LINE_LENGTH; + if(BUFFER_SIZE - index < m){ + index = 0; + } + for (int i = 0; i < m; i++) { + if (k == kn) k = 0; + bbuffer[index++] = ALUB[k]; + k++; + } + bbuffer[index++] = '\n'; + n -= LINE_LENGTH; + } + } + + public static class frequency { + public byte c; + public double p; + + public frequency(char c, double p) { + this.c = (byte)c; + this.p = p; + } + } + + public void old_main() { + int n = 1000; + + makeRepeatFasta("ONE", "Homo sapiens alu", ALU, n * 2); + makeRandomFasta("TWO", "IUB ambiguity codes", IUB, n * 3); + makeRandomFasta("THREE", "Homo sapiens frequency", HomoSapiens, n * 5); + } + // CHECKSTYLE.ON: .* + + @Setup + public void setup() { + makeCumulative(HomoSapiens); + makeCumulative(IUB); + } + + @Benchmark + public void jmhTimeFasta() { + old_main(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/fastaredux.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/fastaredux.java new file mode 100644 index 0000000..a0a86dd --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/fastaredux.java @@ -0,0 +1,204 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and modified + * to fit the benchmarking framework. + * The original benchmarks printed long strings to the stdout. This print was overrided to do + * nothing to fit the framework. These action can cause difference in behaviour of the original and + * changed benchmarks; it hasn't been estimated yet. + * + * The original file is `fastaredux/fastaredux.java-3.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause). + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * modified by Enotus + * + */ + +/* + * Description: Generate and write random DNA sequences. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.io.*; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class fastaredux { + + static final int LINE_LENGTH = 60; + static final int OUT_BUFFER_SIZE = 256*1024; + static final int LOOKUP_SIZE = 4*1024; + static final double LOOKUP_SCALE = LOOKUP_SIZE - 1; + + static final class Freq { + byte c; + double p; + Freq(char cc, double pp) {c = (byte) cc;p = pp;} + } + + static final String ALU = + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" + + "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" + + "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" + + "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" + + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" + + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" + + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; + static final Freq[] IUB = { + new Freq('a', 0.27), + new Freq('c', 0.12), + new Freq('g', 0.12), + new Freq('t', 0.27), + new Freq('B', 0.02), + new Freq('D', 0.02), + new Freq('H', 0.02), + new Freq('K', 0.02), + new Freq('M', 0.02), + new Freq('N', 0.02), + new Freq('R', 0.02), + new Freq('S', 0.02), + new Freq('V', 0.02), + new Freq('W', 0.02), + new Freq('Y', 0.02)}; + static final Freq[] HomoSapiens = { + new Freq('a', 0.3029549426680), + new Freq('c', 0.1979883004921), + new Freq('g', 0.1975473066391), + new Freq('t', 0.3015094502008)}; + + static void sumAndScale(Freq[] a) { + double p = 0; + for (int i = 0; i < a.length; i++) + a[i].p = (p += a[i].p) * LOOKUP_SCALE; + a[a.length - 1].p = LOOKUP_SCALE; + } + + static final class Random { + + static final int IM = 139968; + static final int IA = 3877; + static final int IC = 29573; + static final double SCALE = LOOKUP_SCALE / IM; + static int last = 42; + + static double next() { + return SCALE * (last = (last * IA + IC) % IM); + } + } + + static final class Out { + + static byte buf[] = new byte[OUT_BUFFER_SIZE]; + static final int lim = OUT_BUFFER_SIZE - 2*LINE_LENGTH - 1; + static int ct = 0; + static OutputStream stream; + + static void checkFlush() throws IOException { + if (ct >= lim) { stream.write(buf, 0, ct); ct = 0;} + } + + static void close() throws IOException { + stream.write(buf, 0, ct);ct = 0; + stream.close(); + } + } + + static final class RandomFasta { + + static final Freq[] lookup=new Freq[LOOKUP_SIZE]; + + static void makeLookup(Freq[] a) { + for (int i = 0, j = 0; i < LOOKUP_SIZE; i++) { + while (a[j].p < i) j++; + lookup[i] = a[j]; + } + } + + static void addLine(int bytes) throws IOException{ + Out.checkFlush(); + int lct=Out.ct; + while(lct<Out.ct+bytes){ + double r = Random.next(); // Problematic for AOT! See fastaredux_revised.java. + int ai = (int) r; while (lookup[ai].p < r) ai++; + Out.buf[lct++] = lookup[ai].c; + } + Out.buf[lct++] = (byte)'\n'; + Out.ct=lct; + } + + static void make(String desc, Freq[] a, int n) throws IOException { + makeLookup(a); + + System.arraycopy(desc.getBytes(), 0, Out.buf, Out.ct, desc.length()); + Out.ct+=desc.length(); + + while (n > 0) { + int bytes = Math.min(LINE_LENGTH, n); + addLine(bytes); + n -= bytes; + } + } + } + + static final class RepeatFasta { + + static void make(String desc, byte[] alu, int n) throws IOException { + System.arraycopy(desc.getBytes(), 0, Out.buf, Out.ct, desc.length()); + Out.ct+=desc.length(); + + byte buf[] = new byte[alu.length + LINE_LENGTH]; + for (int i = 0; i < buf.length; i += alu.length) + System.arraycopy(alu, 0, buf, i, Math.min(alu.length, buf.length - i)); + + int pos = 0; + while (n > 0) { + int bytes = Math.min(LINE_LENGTH, n); + Out.checkFlush(); + System.arraycopy(buf, pos, Out.buf, Out.ct, bytes); Out.ct+=bytes; + Out.buf[Out.ct++] = (byte)'\n'; + pos = (pos + bytes) % alu.length; + n -= bytes; + } + } + } + + private void old_main() throws IOException { + int n = 1000; + + RepeatFasta.make(">ONE Homo sapiens alu\n", ALU.getBytes(), n * 2); + RandomFasta.make(">TWO IUB ambiguity codes\n", IUB, n * 3); + RandomFasta.make(">THREE Homo sapiens frequency\n", HomoSapiens, n * 5); + } + // CHECKSTYLE.ON: .* + + /** Writes to nowhere */ + public class NullOutputStream extends OutputStream { + @Override + public void write(int b) throws IOException { + } + } + + @Setup + public void setup() { + sumAndScale(IUB); + sumAndScale(HomoSapiens); + + Out.stream = new NullOutputStream(); + } + + @Benchmark + public void jmhTimeFastaRedux() throws IOException { + old_main(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/knucleotide.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/knucleotide.java new file mode 100644 index 0000000..b14ef8a --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/knucleotide.java @@ -0,0 +1,1312 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `knucleotide/knucleotide.java-4.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause). + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Daryl Griffith + */ + +/* + * Description: Hashtable update and k-nucleotide strings. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.io.ByteArrayInputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class knucleotide { + + private byte[] temp = null; + private byte[] buffer = null; + private byte[] species = null; + private ByteArrayInputStream stream = null; + private LineInputStream in; + + static Map<Key, Value> MAP; + static final int[] SEQUENCES1 = {2, 1}; + static final int[] SEQUENCES2 = {18, 12, 6, 4, 3}; + static final String[] SPICIFIC_SEQUENCES = new String[]{"GGT", "GGTA", "GGTATT", "GGTATTTTAATT", "GGTATTTTAATTTATAGT"}; + static final int LINE_LENGTH = 60; + static final int EOF = -1; + static byte[] nucleotides; + + public void old_main() { + { + int n; + int i; + + try { +outer: + for (;;) { + n = in.readLine(temp); + if (n == EOF) { + return; + } + if (n != LINE_LENGTH) { + for (i = 0; i < species.length; i++) { + if (temp[i] != species[i]) { + continue outer; + } + } + break; + } + } + i = 0; + for (;;) { + n = in.readLine(temp); + if (n == EOF) { + break; + } + for (int j = 0; j < n; i++, j++) { + buffer[i] = translate(temp[j]); + } + } + if (i == buffer.length) { + nucleotides = buffer; + } else { + nucleotides = new byte[i]; + System.arraycopy(buffer, 0, nucleotides, 0, i); + } + } catch (IOException e) { + + } + } + countSequences(SEQUENCES1); + { + List<Entry<Key, Value>> sequence1 = new ArrayList<Entry<Key, Value>>(); + List<Entry<Key, Value>> sequence2 = new ArrayList<Entry<Key, Value>>(); + + for (Entry<Key, Value> entry : MAP.entrySet()) { + switch (Long.numberOfLeadingZeros(entry.getKey().key)) { + case 61: + sequence1.add(entry); + break; + case 59: + sequence2.add(entry); + } + } + printSequence(sequence1); + printSequence(sequence2); + } + countSequences(SEQUENCES2); + { + Key key = new Key(); + } + } + + static byte translate(byte b) { + return (byte) ((b >> 1) & 3); + } + + static void countSequences(int[] sequences) { + for (int sequence : sequences) { + updateHashtable(sequence); + } + } + + static void updateHashtable(int sequence) { + int sequenceTop = nucleotides.length - sequence + 1; + Key key = new Key(); + Value value; + + for (int i = 0; i < sequenceTop; i++) { + key.setHash(i, sequence); + value = MAP.get(key); + if (value == null) { + value = new Value(); + value.count = 1; + MAP.put(key, value); + key = new Key(); + } else { + value.count++; + } + } + } + + static void printSequence(List<Entry<Key, Value>> sequence) { + int sum = 0; + + Collections.sort(sequence, new Comparator<Entry<Key, Value>>() { + + @Override + public int compare(Entry<Key, Value> entry1, Entry<Key, Value> entry2) { + if (entry2.getValue().count != entry1.getValue().count) { + return entry2.getValue().count - entry1.getValue().count; + } + return entry1.getKey().toString().compareTo(entry2.getKey().toString()); + } + }); + for (Entry<Key, Value> entry : sequence) { + sum += entry.getValue().count; + } + } + + static class LineInputStream implements Closeable { + + private static final int LF = 10; + private final ByteBuffer buffer = ByteBuffer.allocate(8192); + private final InputStream in; + + public LineInputStream(InputStream in) { + this.in = in; + buffer.limit(buffer.position()); + } + + public int readLine(byte[] b) throws IOException { + for (int end = buffer.position(); end < buffer.limit(); end++) { + if (buffer.get(end) == LF) { + if (end - buffer.position() == LINE_LENGTH) { + buffer.get(b); + buffer.position(buffer.position() + 1); + return LINE_LENGTH; + } else { + int size = end - buffer.position(); + + buffer.get(b, 0, size); + buffer.position(buffer.position() + 1); + return size; + } + } + } + buffer.compact(); + int n = in.read(buffer.array(), buffer.position(), buffer.remaining()); + + if (n == EOF) { + buffer.flip(); + if (buffer.hasRemaining()) { + int size = buffer.remaining(); + + buffer.get(b, 0, size); + return size; + } else { + return EOF; + } + } else { + buffer.position(buffer.position() + n); + buffer.flip(); + } + for (int end = buffer.position(); end < buffer.limit(); end++) { + if (buffer.get(end) == LF) { + if (end - buffer.position() == LINE_LENGTH) { + buffer.get(b); + buffer.position(buffer.position() + 1); + return LINE_LENGTH; + } else { + int size = end - buffer.position(); + + buffer.get(b, 0, size); + buffer.position(buffer.position() + 1); + return size; + } + } + } + return EOF; + } + + @Override + public void close() throws IOException { + in.close(); + } + } + + static class Key { + + long key; + + void setHash(int offset, int length) { + key = 1; + for (int i = offset + length - 1; i >= offset; i--) { + key = (key << 2) | nucleotides[i]; + } + } + + void setHash(String species) { + key = 1; + for (int i = species.length() - 1; i >= 0; i--) { + key = (key << 2) | translate((byte) species.charAt(i)); + } + } + + @Override + public int hashCode() { + return (int) key; + } + + @Override + public boolean equals(Object obj) { + final Key other = (Key) obj; + + return key == other.key; + } + + @Override + public String toString() { + char[] name = new char[(63 - Long.numberOfLeadingZeros(key)) / 2]; + long temp = key; + + for (int i = 0; temp > 1; temp >>= 2, i++) { + name[i] = (char) (((temp & 3) << 1) | 'A'); + if (name[i] == 'E') { + name[i] = 'T'; + } + } + return new String(name); + } + } + + static class Value { + + int count; + } + // CHECKSTYLE.ON: .* + + public void reinitBuffers() { + MAP = new HashMap<Key, Value>(); + species = ">TH".getBytes(); + } + + public knucleotide() { + temp = new byte[LINE_LENGTH]; + buffer = new byte[125000000]; + stream = new ByteArrayInputStream(fastaStr.getBytes()); + in = new LineInputStream(stream); + } + + @Benchmark + public void jmhTimeKnucleotide() { + reinitBuffers(); + old_main(); + stream.reset(); + } + + private static final String fastaStr = ">ONE Homo sapiens alu\n" + + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n" + + "TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n" + + "AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n" + + "GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n" + + "CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n" + + "GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n" + + "GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n" + + "TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n" + + "AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n" + + "GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n" + + "AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n" + + "AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n" + + "GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n" + + "CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n" + + "AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n" + + "TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n" + + "TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n" + + "GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n" + + "TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n" + + "CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n" + + "CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n" + + "TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n" + + "CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n" + + "AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n" + + "GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n" + + "TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n" + + "TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n" + + "GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n" + + "GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n" + + "ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n" + + "TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n" + + "CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n" + + "CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n" + + "GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n" + + "CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n" + + "GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n" + + "GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n" + + "GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n" + + "GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n" + + "GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n" + + "AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n" + + "CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n" + + "GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n" + + "AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n" + + "GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n" + + "ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n" + + "GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC\n" + + "GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC\n" + + "GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\n" + + "TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA\n" + + "AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG\n" + + "GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT\n" + + "CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC\n" + + "TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG\n" + + "ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC\n" + + "GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA\n" + + "ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA\n" + + "CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA\n" + + "CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA\n" + + "ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG\n" + + "CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG\n" + + "AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC\n" + + "CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG\n" + + "AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC\n" + + "CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG\n" + + "CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG\n" + + "CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG\n" + + "CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC\n" + + "ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA\n" + + "AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC\n" + + "TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC\n" + + "ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG\n" + + "CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG\n" + + "AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT\n" + + "AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA\n" + + "TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC\n" + + "CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA\n" + + "TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG\n" + + "CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT\n" + + "GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG\n" + + "GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG\n" + + "CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG\n" + + "GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG\n" + + "GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT\n" + + "AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT\n" + + "GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT\n" + + "CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG\n" + + "GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC\n" + + "TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT\n" + + "CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG\n" + + "ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG\n" + + "CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG\n" + + "AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA\n" + + "CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG\n" + + "CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC\n" + + "ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC\n" + + "GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC\n" + + "GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG\n" + + "GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT\n" + + "TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG\n" + + "CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA\n" + + "GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG\n" + + "CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC\n" + + "GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG\n" + + "CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA\n" + + "CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG\n" + + "CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA\n" + + "ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC\n" + + "CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT\n" + + "GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA\n" + + "AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG\n" + + "ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC\n" + + "TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA\n" + + "GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC\n" + + "GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG\n" + + "TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC\n" + + "AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA\n" + + "ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA\n" + + "GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\n" + + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG\n" + + "TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC\n" + + "CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT\n" + + "GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC\n" + + "CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA\n" + + "GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT\n" + + "TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC\n" + + "ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC\n" + + "TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG\n" + + "GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG\n" + + "TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG\n" + + "GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC\n" + + "GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT\n" + + "ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC\n" + + "GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC\n" + + "GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC\n" + + "CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA\n" + + "ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG\n" + + "AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC\n" + + "TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT\n" + + "CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG\n" + + "TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG\n" + + "CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC\n" + + "GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT\n" + + "GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC\n" + + "CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC\n" + + "TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG\n" + + "CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\n" + + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG\n" + + "AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG\n" + + "AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT\n" + + "GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA\n" + + "TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC\n" + + "AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA\n" + + "AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG\n" + + "CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC\n" + + "TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG\n" + + "GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT\n" + + "CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG\n" + + "CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG\n" + + "GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA\n" + + "AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA\n" + + "GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC\n" + + "TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC\n" + + "CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA\n" + + "GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\n" + + "CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG\n" + + "AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG\n" + + "ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC\n" + + "ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC\n" + + "AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC\n" + + "GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG\n" + + "GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT\n" + + "CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC\n" + + "GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC\n" + + "CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\n" + + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA\n" + + "GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG\n" + + "GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT\n" + + "CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA\n" + + "AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG\n" + + "CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC\n" + + "CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG\n" + + "GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG\n" + + "GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT\n" + + "TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA\n" + + "ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG\n" + + "CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA\n" + + "ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA\n" + + "GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG\n" + + "TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC\n" + + "GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA\n" + + "GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT\n" + + "GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT\n" + + "GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG\n" + + "TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT\n" + + "TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC\n" + + "TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC\n" + + "GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT\n" + + "CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC\n" + + "TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA\n" + + ">TWO IUB ambiguity codes\n" + + "cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg\n" + + "tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa\n" + + "NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt\n" + + "cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga\n" + + "gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa\n" + + "HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca\n" + + "tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt\n" + + "tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt\n" + + "acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct\n" + + "tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt\n" + + "gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa\n" + + "accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt\n" + + "RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt\n" + + "tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag\n" + + "cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg\n" + + "ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat\n" + + "actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg\n" + + "YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa\n" + + "KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata\n" + + "aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa\n" + + "aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg\n" + + "gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc\n" + + "tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK\n" + + "tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt\n" + + "ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg\n" + + "ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa\n" + + "BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt\n" + + "aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc\n" + + "tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc\n" + + "cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac\n" + + "aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga\n" + + "tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga\n" + + "aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD\n" + + "gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg\n" + + "ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV\n" + + "taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa\n" + + "ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat\n" + + "gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg\n" + + "gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa\n" + + "tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt\n" + + "tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt\n" + + "taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca\n" + + "cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag\n" + + "aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt\n" + + "cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt\n" + + "ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW\n" + + "attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag\n" + + "ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa\n" + + "attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc\n" + + "tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta\n" + + "aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata\n" + + "cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc\n" + + "gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg\n" + + "attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca\n" + + "BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga\n" + + "DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat\n" + + "tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM\n" + + "tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR\n" + + "tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg\n" + + "taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc\n" + + "aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc\n" + + "DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa\n" + + "VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt\n" + + "agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat\n" + + "gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt\n" + + "tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt\n" + + "catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt\n" + + "tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR\n" + + "aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat\n" + + "aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac\n" + + "acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS\n" + + "tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga\n" + + "aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM\n" + + "acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt\n" + + "RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt\n" + + "RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta\n" + + "tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac\n" + + "gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt\n" + + "YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc\n" + + "ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt\n" + + "ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat\n" + + "gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta\n" + + "KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD\n" + + "aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg\n" + + "gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH\n" + + "taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact\n" + + "VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV\n" + + "NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa\n" + + "MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag\n" + + "cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata\n" + + "ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg\n" + + "tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN\n" + + "aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc\n" + + "actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg\n" + + "tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga\n" + + "gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa\n" + + "BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca\n" + + "aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata\n" + + "aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat\n" + + "YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt\n" + + "aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW\n" + + "cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata\n" + + "tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata\n" + + "tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt\n" + + "MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac\n" + + "taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta\n" + + "tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS\n" + + "RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc\n" + + "agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata\n" + + "NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa\n" + + "gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata\n" + + "aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt\n" + + "ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW\n" + + "cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt\n" + + "tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa\n" + + "RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt\n" + + "tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD\n" + + "gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc\n" + + "tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta\n" + + "ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM\n" + + "tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc\n" + + "ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc\n" + + "BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt\n" + + "gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga\n" + + "acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag\n" + + "gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc\n" + + "taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat\n" + + "acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta\n" + + "tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt\n" + + "catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa\n" + + "tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB\n" + + "atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR\n" + + "ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta\n" + + "ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta\n" + + "cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK\n" + + "SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW\n" + + "VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc\n" + + "BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct\n" + + "NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt\n" + + "tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa\n" + + "ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa\n" + + "cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa\n" + + "VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR\n" + + "atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac\n" + + "aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc\n" + + "tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac\n" + + "RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag\n" + + "gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc\n" + + "tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact\n" + + "attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc\n" + + "atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga\n" + + "cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt\n" + + "NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR\n" + + "ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat\n" + + "cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg\n" + + "aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac\n" + + "agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR\n" + + "tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga\n" + + "ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg\n" + + "ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa\n" + + "tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag\n" + + "taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg\n" + + "tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN\n" + + "YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt\n" + + "ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa\n" + + "tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat\n" + + "ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg\n" + + "attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt\n" + + "atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW\n" + + "YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta\n" + + "gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV\n" + + "MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta\n" + + "tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt\n" + + "ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa\n" + + "aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa\n" + + "BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM\n" + + "tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK\n" + + "StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV\n" + + "cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN\n" + + "atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg\n" + + "atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg\n" + + "ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct\n" + + "gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM\n" + + "tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD\n" + + "BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc\n" + + "agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga\n" + + "HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR\n" + + "tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt\n" + + "aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa\n" + + "catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB\n" + + "aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat\n" + + "tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt\n" + + "cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag\n" + + "DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat\n" + + "gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta\n" + + "tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM\n" + + "atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc\n" + + "KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt\n" + + "tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata\n" + + "tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK\n" + + "taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt\n" + + "NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa\n" + + "HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa\n" + + "ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg\n" + + "tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK\n" + + "cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga\n" + + "ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca\n" + + "HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg\n" + + "gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS\n" + + "BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg\n" + + "gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat\n" + + "KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact\n" + + "cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat\n" + + "tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD\n" + + "taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM\n" + + "gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt\n" + + "aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat\n" + + "acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta\n" + + "RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc\n" + + "attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac\n" + + "KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS\n" + + "KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD\n" + + "gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB\n" + + "aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct\n" + + "aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga\n" + + "ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY\n" + + "tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga\n" + + "aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta\n" + + "tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY\n" + + "MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc\n" + + "cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta\n" + + "caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt\n" + + "ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc\n" + + "acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat\n" + + "tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc\n" + + "gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa\n" + + "atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga\n" + + "aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat\n" + + "NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt\n" + + "taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa\n" + + "aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat\n" + + "ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca\n" + + "DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata\n" + + "tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat\n" + + "aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa\n" + + "ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM\n" + + "ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca\n" + + "RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa\n" + + "aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac\n" + + "aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt\n" + + "aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK\n" + + "tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat\n" + + "atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR\n" + + "BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc\n" + + "gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct\n" + + "cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN\n" + + "RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat\n" + + "taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt\n" + + "aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt\n" + + "gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct\n" + + "gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa\n" + + "aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta\n" + + "gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg\n" + + "ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat\n" + + "MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct\n" + + "SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY\n" + + "aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt\n" + + "VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat\n" + + "HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc\n" + + "agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt\n" + + "gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg\n" + + "agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg\n" + + "tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag\n" + + "gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga\n" + + "VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg\n" + + "tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV\n" + + "MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt\n" + + "actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa\n" + + "WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa\n" + + "tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD\n" + + "KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct\n" + + "BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac\n" + + "attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB\n" + + "VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD\n" + + "aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca\n" + + "tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat\n" + + "tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK\n" + + "tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt\n" + + "VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta\n" + + "tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat\n" + + "ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa\n" + + "tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg\n" + + "WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta\n" + + "tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc\n" + + "tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct\n" + + "MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat\n" + + "tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac\n" + + "atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg\n" + + "aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt\n" + + "aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa\n" + + ">THREE Homo sapiens frequency\n" + + "aagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgtacctaaacctaca\n" + + "tcgtatgtatttgctgacgttcattcttgatacataaagatccgatatcggtccactttg\n" + + "tttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatg\n" + + "gggatattgccggtgagtacaagttagaccacacattagaactgacctatattcgtcatc\n" + + "atagagatggagtatgaattgattctgcgaagtacactggctttacgagtatctagacgc\n" + + "cgcggtatatctcccgtcaatactatgaaggtatatatatagaggctgaaaattcatgtt\n" + + "caatcctctttctaagagtgagtgggagccccttctgttgtcggagtaaaaaggcattat\n" + + "tcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaaaagagttacctt\n" + + "agggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtgcgattaattctt\n" + + "ttgatgacagatctcattattttatatagctccctctttgtatttagagtttgcgtaggt\n" + + "aacctggcaaaaccatatcccggggggagagtgcgctgaacattttatacgatgtgatta\n" + + "ctcaaaggataaggttcgaggcctctatactcatggaactatcttataattataatggat\n" + + "cgtggctcattccacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaac\n" + + "gtacatcttctaaggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaa\n" + + "atatttttaaaaattgattctactgcgaggaactaaggtgtagacaagcccttagtaacc\n" + + "ggtggatgtcgcttcagttttatagcaaacattattcaatttcagtcttgactgaaatta\n" + + "gtttgttagtgttagaggtccatatgtcacatgcatatggtctagatgccattgtacagt\n" + + "aataccttagattagtattagcggcatgcgtacttggatttcacttgtaagaatgagctt\n" + + "aggacggtcgcctgtagggctgcaaataggaatacttacaatttttgatgacttgttagc\n" + + "atatcgctatcacccataaaaaacctgatacttgatgagcgggtgattgagactatgtac\n" + + "tgatataattcaatagctccaatagatgaaacagctatgcgcctatttatgtcaaataat\n" + + "cgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcggtgatctctatcc\n" + + "taaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagt\n" + + "taaatttgcatctcatgccccacgaagaatgggtagagagtttgaaggtgcttctggatt\n" + + "ttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaacc\n" + + "acaaacccctgggtgaatctgattagccaacccagtgatctgatttcagttgtcaaatct\n" + + "cttttttataactaccttttgtttccataatttaaccggatctcataatgaacaaacggg\n" + + "tagaataatggtagcacatagcgagcttgtctattcagaaatatggcctactcagaatgt\n" + + "attctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttat\n" + + "cggttccttgtactacaatactcttgcccaacaaatactaagcataacagcaaaattcga\n" + + "atccccctccttttaataaatggtttttcaatatagccgattcgtattcgttagtctttc\n" + + "accaactattaacctggcatctaattaataaaatcaccaaaggactctataatatgacag\n" + + "tcacttcggcctcttttaagacagttgattattgcaggtccgcaattgatggtgacatgc\n" + + "acaattagttagaatccgactatggagacaattaacaattgtagtgcccatttggtccag\n" + + "ttgacttcaaccacgagttataaaggtattttaatttatagtcgatagtaccaacaacaa\n" + + "gcacaatcataattatgttagaaaacccagggggtaatgctctaaatccagctttaaggc\n" + + "cagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctagg\n" + + "aggtgccgagtgagaatatcagataccttatgaagcaacgattatatctggactagatca\n" + + "tgatgatcggaataaaacattgaaataagtccttatcaaggagcataaacattttattta\n" + + "atttatacttcgtaaataaattcagaattttttttcaagacattaatctgagtaaatgac\n" + + "ggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgc\n" + + "gtttttactgaaacaaaggttcaccggaaagaaggctgccacttttagcttcttgacgat\n" + + "ctttagcgtcatatttttagattagtcgaaaaacggaaaacaaacttaacgaagctggtt\n" + + "gcacggggtaccgagaaaccaaagagcaggacaactccttgatcgggaagaactgaaata\n" + + "gacagctgtcattttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgc\n" + + "atgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttgactaattgatga\n" + + "agcaaacaaaatagccggtattcgttaaaaggaacgggttgccagctacagatatactct\n" + + "aggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcataatacttgtcac\n" + + "ataaacaagatcgctgaattaaacattaaacagttagtgatacacaatcgtggttggggc\n" + + "tgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaa\n" + + "cattattatttcttgacaatggaatcgataagcgttcctctaacttggtatatatatctc\n" + + "gaccccgggattccagccattcttgtatgaagatttaaccatttaactatgcatagttga\n" + + "atggtaaggaaaatgatattgactgcaacagattttggatgcaaaaatatttgtgaatta\n" + + "ttggttatatactggttgtatagcacaatcattaggtcctagaaggcatactcaacctca\n" + + "gcgagagagctagcatgcataattgtaccgcccatattaatattcctgaaatgatttctt\n" + + "acattacgcccaatttcagtcatcgaacacccccatcaatttacccgatagagaacgtga\n" + + "tcatacgcaataccctatgcgaacgtccactctatagcgtctgtatacaatgattattcg\n" + + "ttccatttacaacgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctc\n" + + "ctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgt\n" + + "acgaatgaaaggccacttttagaagagacctttgtatccattgtggagaatatcataaat\n" + + "tcaagatggggtgtcatgctattcggtcctaaacattcttaatggctgttctattgttag\n" + + "tctgatttaaaatggaaccatagcacgaatagttagatagggctcatacccctgtaacga\n" + + "tctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatca\n" + + "aagaacactcacacgtcagattattacactgatacgaattatttcagtcgacagtaattg\n" + + "aatagaaacttattaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttg\n" + + "actgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagt\n" + + "tttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaa\n" + + "gatcacacatcacacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtag\n" + + "tgggatcaacatatggacgaatttatgctcaatgagccaacctcccccgcattgcggttc\n" + + "attttaaggcctgggtaacatctatcgtttagataatcaaaggaatccgactatgcaatt\n" + + "gtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaatacc\n" + + "atattgaaatcgtaatacgataattgttgctattgactacaggttatgaaaaaacttact\n" + + "ttgcgggtacatgcatatttttgtaccacattattacgcgatatctctcagtgtactcta\n" + + "aattaaaccctcttcgaacattttagttcctattcgtaaacacgtgctacgcggcaattt\n" + + "gccggtcgtagaatggacaactccagttcaactgcatgtaactcatagctcgcgttagta\n" + + "taaattgactagtagccatgggacaaagtaactagtcagcggaaaagatccctttaaaga\n" + + "tatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagc\n" + + "gtctctatcgtatcttctaattttgggccgtgagaatcgaaactactctgatttgctgca\n" + + "cacgttaggtaatatcgcccattttcccgtataagctccgtacttatacgaactacacga\n" + + "ccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtctattaaaattac\n" + + "agacatactccatatctcgctccttgaactttgaataatgcgctaacttgtactatgaat\n" + + "aggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacatgttgtcagattt\n" + + "atgattatctagttttagatcacgtttaccgataatcggctgtggtctgagcagtcctac\n" + + "actgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaa\n" + + "tacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaa\n" + + "ccatttttacgatttttactatagcggtcatgaagtgcgaaactgcttgcaaattttcta\n" + + "cacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccag\n" + + "ggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccatatacctaacgcc\n" + + "ataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcag\n" + + "cacagactaactttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaag\n" + + "tcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatttctactattgtc\n" + + "agctgtacgactgtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttat\n" + + "gaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaatcctggcttaccc\n" + + "gattctccggaagtctgacctagagattgacgacggccgcgtattattgagacctcttca\n" + + "ggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaagccgactccgct\n" + + "acacgagtttctactaaaccaatgtagccttatgcttagatgaataccgtcctaattaga\n" + + "tattccggcataacagcagtaaattatctgttcaatggacgaacattgaattgttagtat\n" + + "tctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatg\n" + + "cttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacac\n" + + "cagcatattctatatgctagacgtcttccttaaaggatcgtagtattataattaataata\n" + + "agaaatatggttgacgtctagtcagcgggcatacgctgctctatatactggcattattca\n" + + "aaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgg\n" + + "gaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaataaaaaaaatgtta\n" + + "atagtacgtttacgacattttattttataataaagagaaactattacacctattgatatg\n" + + "ataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttctacatggtatag\n" + + "acctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaatctagtcattta\n" + + "ctactgtctttcgagctattataccacttcactatgtggtgtttctttgctatgtatggg\n" + + "gctagtcaaacatgatgactatagctacaactcagagagcgggcgtgttaagagtatctc\n" + + "atgctagaactgcacgacgaacttgatacaaagtaacaacatttacgattccacaaggtg\n" + + "actttgaagaaacatagtttaattctctgcttcgatcatttctataaaccggtaccatcg\n" + + "cagcggatagatgcataacatttctactactccaggcatcttaaaacacacgtagtactt\n" + + "cactagattaagacacgataagtgtataacttggcagtgggaagcaaggagattggcgaa\n" + + "ctcctggcatctgttacgttttgttcaggctcggttgttgataatgtccgactcctgcca\n" + + "tattgaagactcgctcgagggagatcgggattcgttgattataagtacacgtgttccgta\n" + + "atactatgaggcagtgattcaaaatggcacttctgacttacatgactaggtattattacc\n" + + "acggaagcgttaaaggcacactcttatggacttaagattgcaagtgccttcttctagcct\n" + + "gaattcgcgggttcaacacaaactctctttagacatccgttgcctaaaggctgagacgta\n" + + "ggggcaaccctttaactatgtactaaaaaactagttggtaatttaacaacgtgtccaatc\n" + + "aagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtga\n" + + "taaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataa\n" + + "cctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagca\n" + + "tacatttaggtctcctgcattgcattcaattgaatcgtttgtattatgagctgtacagta\n" + + "gctatatcagctatagttatcccagaggaacaggtaaactagctctgagcgtgaaatccg\n" + + "gatattagaacccctagatgggattgattctagctaatacaggcttatctggttttacag\n" + + "ttatctagatgattggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtat\n" + + "tgcccgggaagctattttctaggtattataaagtcgagcattaatatcaatttgacagta\n" + + "aaggtctttcaccagcttcatatgccatagggcccatactcgatttaaattgaacggttt\n" + + "aacgagtattggaactctcacttataactgagtagctatacgaaaaatctggtccatttc\n" + + "cagaaatttattatcgatttgctgcttagtacccaggaagtgataacccttgaaggcaca\n" + + "acactgtaataagttttcctgtcacatctgtaatattcggtcactacgcattcacgacta\n" + + "aagataattactatactaattaaaagttcaatgttagggccgaatcatagtagaaattct\n" + + "cgtctagcctaatcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaa\n" + + "tgctagagataggtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagtt\n" + + "cgcttctttagtccgggcgtttgggatgacaactactatacgtagagccgtactcaggat\n" + + "tagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtt\n" + + "taggccaaacattaaccgttgtagggatattctaatacaggccttcaccgaaccctaatg\n" + + "ataatctgtcttaataacattaaatgattgtctccgctacgagctcttagggcctcattt\n" + + "taaatgactaatgtccaaagaagagactttcccaatttcaatctgtcacgtatagacggc\n" + + "accttagtgagtcatatcattaagatagaagattatcaggagggaagtttctattatcaa\n" + + "ccgttacgcaaccataaacttttaaatctcataatggcattgagatcaagagctttcatg\n" + + "atggtaaagttcgtatgtgatgctggggagctagatatcggtataccacttcggttgtgg\n" + + "taagcccgagtgggccgttagtaatattaatagacgattatccgacaatgcattcgctga\n" + + "aataatcttacttaggagaaattaatgctatgagccaaaactatttatgtctgtcacatt\n" + + "attgactaaagtatctatcgacaaaactgatgtccataagttgtagcagatagtcggtgt\n" + + "atggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaa\n" + + "attgcctattatacagataggcttgtttagtcagataaggttccgcttgaggtgctctaa\n" + + "cttagcgagagttagaaagcctagtgagaggcattttggtgccaaactccggctcgcatg\n" + + "agtaggccagagagtcactttctttcgtcgaagaagttggtgaacagccttttgattagt\n" + + "tgtttgtcttgtggctatgtgctactatataagttagaacgcaaactaatctaatcagca\n" + + "aagtaaaataggaccttgaacgagacggggtacgccgttgaggctcgagatagtagataa\n" + + "actagaggaatgtagataaaacattagctagggggtttagttactggattacataggaag\n" + + "tgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggactta\n" + + "acaagttcgtgcataatgaaatcctatacggactttgcatatctctaccgactcatctgg\n" + + "tcgtctatgcgggtaattgtattgctccaagtggatgactattttggcgtcccagcacat\n" + + "agtaaatgtaaatccttataatagcataagcaattattagactgcgtgaagtcttagtag\n" + + "ttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccat\n" + + "tgaggtcattgaatgtacggagcactattatcaatgcggtatgcgattttctgagcgatt\n" + + "attgttaaagacttagcgttgagccccggaacacttgattacagattctttaaggagtta\n" + + "tccaaatatcattttaaataatagtagtatcgtgctttggacaataaaaaaagacccgtt\n" + + "ctcttatgttgttttgcgacgtacttctctgatatatacttcaactatgaagattctatt\n" + + "catcgataacccaggtatatttatatgcccgttcactgcgcagggcaaattatctacgga\n" + + "caataatgacgtagttggacccggtaagaactaacgcttaatatgattaaggatgtatgc\n" + + "cagtattatcttattatgtcagagtagaagtttctctgagattttccgtcgttgtggtac\n" + + "accggatttggctctctttttagaactgagaactcggagtgtgtagtcttgtttccttca\n" + + "atttatcaatatgcttttataccgccctcatcaactataacaggacgacaagttccgtct\n" + + "tgctccatcatatactaccgatacaccaatcgtatcaagtttagtatacttgctttctct\n" + + "cttctacagcttactcgcttgtccgagaagcggttggtgctcataaagttagtagtaaat\n" + + "gtacaactagtagccagtccttacctgtttttacgactactacggacaccatgagataca\n" + + "gaagttagtgctacaattataccattacatgctcaatatcgttgtcggccataagatcga\n" + + "agagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacaca\n" + + "ctccccttgttgactaacatcttttacaagaggctaaatcattgtccaggatcgaatacc\n" + + "ttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtagtatgatttacaa\n" + + "aaaacatctatgtgagtaggccaattgtagtagaatatattcatttgaccgtcattagcc\n" + + "ttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcga\n" + + "tttcatacagctgccaacaccttttttaccaggctagagtcagaaaagttggagccatgt\n" + + "taaatagttaccatcataaaccactgttgtctactagtctgatcagctttcatgcctgtg\n" + + "caagcaatatggattctcacgtaatggtaacaactgttgcgttacttaggctggttaatt\n" + + "tgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcc\n" + + "taggaataggaaaagtaaagctcttttattctgatagtgactaactcaggatctaaatac\n" + + "gcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgaccagttatagaca\n" + + "gggtaattcaatatttaatgtctcccttaacatttcaccagcatggattgaagatagtat\n" + + "aaagttttacatggcagtcattgtgtcacggttctatacaaattctgatagttagacggt\n" + + "atttgaaatgtgcttctagcatggtatcttacacaactgaatgaacgactggagccgttc\n" + + "gtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaatatagtataatat\n" + + "aaattgtgatatgaataacacaagtaactacagtttggacaattaattgttctaaactaa\n" + + "aaatcattcacttcagatggcatagagttatggctactacacatataaagcggtatgtga\n" + + "aacacccgttttagccggaaaccctctactgctcgggacaatgaatgatttccaaaatat\n" + + "ggatgtgcagaattgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtc\n" + + "gttgcaaagtttaaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaa\n" + + "acgtgacagaaagtctagaagaactgtgaataatgtctattactgattaactagtaagac\n" + + "attagtgcatctggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtc\n" + + "gtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaag\n" + + "gtcaatttcacaatatccgatcacattgtgctaggttcgtcctttaccttgcttagtgct\n" + + "gcatgtacggggtgtcatgacttgttatcggcagactctttatcccaagaatggataata\n" + + "tgtacatggaaagtgtccataattaagtcccttcactgtaaagaatgactgccacgtgat\n" + + "ccatgaggtctacagaaaccgacttacttgctttttgatcaacttaattatggattcata\n" + + "aagttcagatatcggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatc\n" + + "tgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgttacaccactcat\n" + + "tagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaa\n" + + "ctggatgtacgacgatcgagacgaagaggtatatataacctaaatactaggtacgttgtt\n" + + "agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct\n" + + "cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt\n" + + "tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat\n" + + "tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc\n" + + "gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc\n" + + "tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg\n" + + "tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat\n" + + "atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag\n" + + "cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa\n" + + "ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt\n" + + "ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat\n" + + "atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc\n" + + "gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact\n" + + "tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag\n" + + "gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg\n" + + "atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag\n" + + "tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac\n" + + "ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag\n" + + "tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta\n" + + "aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt\n" + + "gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa\n" + + "ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc\n" + + "agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt\n" + + "agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat\n" + + "acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc\n" + + "cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct\n" + + "cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct\n" + + "cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa\n" + + "aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt\n" + + "tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt\n" + + "atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct\n" + + "cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga\n" + + "tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat\n" + + "catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc\n" + + "tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg\n" + + "caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc\n" + + "tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc\n" + + "aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag\n" + + "aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat\n" + + "ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac\n" + + "gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag\n" + + "ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt\n" + + "cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta\n" + + "gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca\n" + + "ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt\n" + + "cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg\n" + + "taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg\n" + + "gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc\n" + + "taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt\n" + + "ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt\n" + + "aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt\n" + + "gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta\n" + + "acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct\n" + + "ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta\n" + + "tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt\n" + + "tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg\n" + + "tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa\n" + + "ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac\n" + + "aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga\n" + + "tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca\n" + + "gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt\n" + + "gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc\n" + + "cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg\n" + + "actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa\n" + + "tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg\n" + + "ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt\n" + + "ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta\n" + + "agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc\n" + + "gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa\n" + + "tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt\n" + + "atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca\n" + + "cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa\n" + + "tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca\n" + + "gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg\n" + + "gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat\n" + + "aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg\n" + + "gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat\n" + + "cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa\n" + + "taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg\n" + + "tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt\n" + + "ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac\n" + + "aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc\n" + + "gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag\n" + + "aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc\n" + + "tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa\n" + + "tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata\n" + + "aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta\n" + + "ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc\n" + + "ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc\n" + + "caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct\n" + + "gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg\n" + + "cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc\n" + + "ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta\n" + + "tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg\n" + + "atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc\n" + + "ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc\n" + + "acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc\n" + + "taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga\n" + + "ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga\n" + + "aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat\n" + + "cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc\n" + + "tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact\n" + + "gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa\n" + + "aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag\n" + + "cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc\n" + + "cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa\n" + + "gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg\n" + + "cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg\n" + + "gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca\n" + + "agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac\n" + + "aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt\n" + + "aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg\n" + + "cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt\n" + + "agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg\n" + + "cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa\n" + + "agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga\n" + + "gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta\n" + + "aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata\n" + + "agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc\n" + + "cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc\n" + + "agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca\n" + + "ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga\n" + + "tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag\n" + + "gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat\n" + + "gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt\n" + + "ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg\n" + + "gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc\n" + + "atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc\n" + + "tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata\n" + + "ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg\n" + + "tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag\n" + + "cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg\n" + + "ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat\n" + + "aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg\n" + + "gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat\n" + + "ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag\n" + + "atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac\n" + + "aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct\n" + + "gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga\n" + + "atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt\n" + + "aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt\n" + + "tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg\n" + + "ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta\n" + + "gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac\n" + + "cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct\n" + + "ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga\n" + + "ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg\n" + + "ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat\n" + + "cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga\n" + + "tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt\n" + + "tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc\n" + + "cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt\n" + + "gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct\n" + + "ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt\n" + + "ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa\n" + + "tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc\n" + + "agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta\n" + + "ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc\n" + + "cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct\n" + + "agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc\n" + + "tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc\n" + + "gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga\n" + + "ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa\n" + + "ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca\n" + + "agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata\n" + + "attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact\n" + + "ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat\n" + + "agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat\n" + + "aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata\n" + + "gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta\n" + + "gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg\n" + + "ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac\n" + + "gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata\n" + + "ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat\n" + + "taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta\n" + + "aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata\n" + + "tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata\n" + + "ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga\n" + + "agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt\n" + + "ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt\n" + + "agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg\n" + + "gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa\n" + + "tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg\n" + + "gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct\n" + + "cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc\n" + + "ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta\n" + + "cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt\n" + + "gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc\n" + + "gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc\n" + + "tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt\n" + + "cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca\n" + + "aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac\n" + + "ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac\n" + + "gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag\n" + + "aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga\n" + + "gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct\n" + + "aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta\n" + + "gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat\n" + + "agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat\n" + + "caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta\n" + + "gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta\n" + + "aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt\n" + + "tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt\n" + + "tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc\n" + + "ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg\n" + + "ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg\n" + + "gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa\n" + + "ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa\n" + + "aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa\n" + + "tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat\n" + + "acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac\n" + + "atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga\n" + + "gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac\n" + + "tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc\n" + + "cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa\n" + + "gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg\n" + + "acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga\n" + + "acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga\n" + + "attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg\n" + + "tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt\n" + + "cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag\n" + + "aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac\n" + + "ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac\n" + + "tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat\n" + + "gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga\n" + + "gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc\n" + + "acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta\n" + + "gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac\n" + + "gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc\n" + + "ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt\n" + + "taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg\n" + + "agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa\n" + + "gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag\n" + + "ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc\n" + + "accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag\n" + + "tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact\n" + + "taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga\n" + + "catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat\n" + + "tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga\n" + + "ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg\n" + + "aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa\n" + + "atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa\n" + + "tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt\n" + + "ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact\n" + + "tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt\n" + + "aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat\n" + + "agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc\n" + + "acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc\n" + + "aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct\n" + + "ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat\n" + + "gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat\n" + + "taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata\n" + + "taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga\n" + + "tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat\n" + + "gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg\n" + + "ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa\n" + + "atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat\n" + + "tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat\n" + + "cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt\n" + + "aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac\n" + + "taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag\n" + + "caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata\n" + + "ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct\n" + + "tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac\n" + + "tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg\n" + + "gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta\n" + + "gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat\n" + + "gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg\n" + + "ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa\n" + + "tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa\n" + + "taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac\n" + + "gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt\n" + + "ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga\n" + + "gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca\n" + + "tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc\n" + + "ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt\n" + + "tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc\n" + + "cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat\n" + + "ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg\n" + + "caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg\n" + + "cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat\n" + + "gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat\n" + + "cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg\n" + + "taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat\n" + + "tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata\n" + + "taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc\n" + + "tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac\n" + + "tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt\n" + + "tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt\n" + + "ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt\n" + + "aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg\n" + + "atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga\n" + + "actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta\n" + + "gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga\n" + + "ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga\n" + + "gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct\n" + + "tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc\n" + + "aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta\n" + + "atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt\n" + + "catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc"; +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/mandelbrot.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/mandelbrot.java new file mode 100644 index 0000000..df979d8 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/mandelbrot.java @@ -0,0 +1,104 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `mandelbrot/mandelbrot.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Stefan Krause + * slightly modified by Chad Whipkey + */ + +/* + * Description: Generate Mandelbrot set portable bitmap file. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.io.IOException; +import java.io.PrintStream; +import java.lang.System; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class mandelbrot { + private static final int PREDEFINED_SIZE = 200; + + private static final int BUFFER_SIZE = 8192; + + public mandelbrot() { + this.size = PREDEFINED_SIZE; + fac = 2.0 / size; + shift = size % 8 == 0 ? 0 : (8- size % 8); + } + final int size; + final byte [] buf = new byte[BUFFER_SIZE]; + int bufLen = 0; + final double fac; + final int shift; + + public void compute() + { + for (int y = 0; y<size; y++) + computeRow(y); + } + + private void computeRow(int y) + { + int bits = 0; + + final double Ci = (y*fac - 1.0); + final byte[] bufLocal = buf; + for (int x = 0; x<size;x++) { + double Zr = 0.0; + double Zi = 0.0; + double Cr = (x*fac - 1.5); + int i = 50; + double ZrN = 0; + double ZiN = 0; + do { + Zi = 2.0 * Zr * Zi + Ci; + Zr = ZrN - ZiN + Cr; + ZiN = Zi * Zi; + ZrN = Zr * Zr; + } while (!(ZiN + ZrN > 4.0) && --i > 0); + + bits = bits << 1; + if (i == 0) bits++; + + if (x%8 == 7) { + bufLocal[bufLen++] = (byte) bits; + if ( bufLen == BUFFER_SIZE) { + bufLen = 0; + } + bits = 0; + } + } + if (shift!=0) { + bits = bits << shift; + bufLocal[bufLen++] = (byte) bits; + if ( bufLen == BUFFER_SIZE) { + bufLen = 0; + } + } + } + + // CHECKSTYLE.OFF: .* + @Benchmark + public void jmhTimeMandelbrot() { + bufLen = 0; + compute(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/meteor.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/meteor.java new file mode 100644 index 0000000..6671bb2 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/meteor.java @@ -0,0 +1,479 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `meteor/meteor.java` from the archive available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Tony Seebregts + * modified by + */ + +/* + * Description: Search for solutions to shape packing puzzle + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +//package benchmarks.benchmarksgame; + + +import java.util.ArrayList; +import java.util.Date; +import java.util.SortedSet; +import java.util.TreeSet; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +/** First hack at a Java solver for the meteor puzzle - just the IBM + * developerWorks article algorithm optimized with precalculated shapes + * and bitmasks. Should be possible to optimize it some more to take + * advantage of reflections but its turning out to be less obvious + * than expected :-). + * <p> + * Notes: + * <ul> + * <li>Seems to run faster without the -server switch. + * <li>Testing for islands seems to be slower than just fitting pieces. + * </ul> + * + * @author Tony Seebregts + * + */ + +// CHECKSTYLE.OFF: .* +public class meteor + { // CONSTANTS + + private static final int[] SHIFT = { 0,6,11,17,22,28,33,39,44,50 }; + private static final long[][] MASK = { { 0x01L, 0x02L, 0x04L, 0x08L, 0x10L }, + { 0x01L << 6, 0x02L << 6, 0x04L << 6, 0x08L << 6,0x10L << 6 }, + { 0x01L << 11,0x02L << 11,0x04L << 11,0x08L << 11,0x10L << 11 }, + { 0x01L << 17,0x02L << 17,0x04L << 17,0x08L << 17,0x10L << 17 }, + { 0x01L << 22,0x02L << 22,0x04L << 22,0x08L << 22,0x10L << 22 }, + { 0x01L << 28,0x02L << 28,0x04L << 28,0x08L << 28,0x10L << 28 }, + { 0x01L << 33,0x02L << 33,0x04L << 33,0x08L << 33,0x10L << 33 }, + { 0x01L << 39,0x02L << 39,0x04L << 39,0x08L << 39,0x10L << 39 }, + { 0x01L << 44,0x02L << 44,0x04L << 44,0x08L << 44,0x10L << 44 }, + { 0x01L << 50,0x02L << 50,0x04L << 50,0x08L << 50,0x10L << 50 } + }; + + private static final boolean DEBUG = false; + + // CLASS VARIABLES + + // INSTANCE VARIABLES + + private SortedSet<String> solutions = new TreeSet<String>(); + private Entry[] solution = new Entry[10]; + private int depth = 0; + private Piece[] pieces = { new Piece(PIECE0), + new Piece(PIECE1), + new Piece(PIECE2), + new Piece(PIECE3), + new Piece(PIECE4), + new Piece(PIECE5), + new Piece(PIECE6), + new Piece(PIECE7), + new Piece(PIECE8), + new Piece(PIECE9) + }; + + // CLASS METHODS + + /** Prints out the puzzle. + * + * + */ + + private static void print (String solution) + { System.out.print(solution.replaceAll("(\\d{5})(\\d{5})","$1 $2") + .replaceAll("(\\d{5})","$1\n") + .replaceAll("(\\d)","$1 ")); + } + + // CONSTRUCTORS + + /** Initialises the puzzle. + * + */ + + public meteor () + { for (int i=0; i<10; i++) + solution[i] = new Entry(); + } + + // INSTANCE METHODS + + /** Initialises the puzzle and solution set at [0,0] + * + * @return Sorted list of solution strings. + */ + + private SortedSet<String> solve() + { solve(0x0002004008010020L,0,0); + + return solutions; + } + + /** Recursively solves the puzzle by fitting pieces into the + * next available hexagon. + * + * @param puzzle Current puzzle bitmask. + * @param row Row of next available hexagon. + * @param col Column next available hexagon. + * + */ + + private void solve (long puzzle,int row,int col) + { for (int ix=0; ix<pieces.length; ix++) + { Piece piece; + Shape[] list; + + // ... find shapes that fit + + if ((piece = pieces[ix]) == null) + continue; + else + list = pieces[ix].shapes(row,col); + + for (Shape shape: list) + { // ... fits badly ? + + if ((shape.bitmap & puzzle) != 0) + continue; + + // ... try piece in puzzle + + long clone = puzzle | shape.bitmap; + + // ... find next position + + int irow = row; + int icol = col/2 + 1; + + next: + while (irow < 10) + { while (icol < 5) + { if ((clone & MASK[irow][icol]) == 0) + break next; + + icol++; + } + + irow++; + icol = 0; + } + + // ... solve next + + Entry entry; + + pieces[ix] = null; + entry = solution[depth++]; + entry.row = row; + entry.col = col; + entry.shape = shape; + + if (depth == 10) + solutions.add(serialize(solution)); + else + solve (clone,irow,2*icol + (irow % 2)); + + depth--; + pieces[ix] = piece; + } + } + } + + /** Serializes the current solution to a string. + * + */ + + private String serialize (Entry[] solution) + { char[] puzzle = new char[50]; + Shape shape; + int row; + int col; + + for (Entry entry: solution) + { shape = entry.shape; + row = entry.row; + col = entry.col; + + for (int[] xy: shape.vector) + puzzle[5 * (row + xy[0]) + (col + xy[1])/2] = shape.symbol; + } + + return new String(puzzle); + } + + // INNER CLASSES + + /** Container class for a solution set entry. + * + */ + + private static class Entry + { public int row; + public int col; + public Shape shape; + } + + /** Container class for the shapes for a single puzzle piece. + * + * + */ + + private static class Piece + { private Shape[][][] shapes = new Shape[10][10][]; + + @SuppressWarnings("unchecked") + private Piece (Shape[] list) + { // ... initialise + + ArrayList[][] array = new ArrayList[10][10]; + + for (int i=0; i<10; i++) + for (int j=0; j<10; j++) + array[i][j] = new ArrayList<Shape>(); + + // ... generate list + + for (Shape mutant: list) + for (int row=0; row<=mutant.maxRow; row++) + for (int col=mutant.minCol; col<=mutant.maxCol; col++) + { if (!mutant.islet) + array[row][col].add(new Shape(mutant,row,col)); + else if ((row != 0) || (col != 0)) + array[row][col].add(new Shape(mutant,row,col)); + } + + for (int row=0; row<10; row++) + for (int col=0; col<10; col++) + shapes[row][col] = (Shape[]) array[row][col].toArray(new Shape[0]); + } + + @SuppressWarnings("unchecked") + private Shape[] shapes(int row,int col) + { return shapes[row][col]; + } + + } + + /** Container class for the shape vector and bitmap single puzzle piece mutation. + * + * + */ + + private static class Shape + { private char symbol; + private int[][] vector; + private long bitmap; + private int shift; + + private boolean islet; + private int maxRow; + private int minCol; + private int maxCol; + + private Shape (char symbol, + int[][] vector, + long bitmap, + int shift, + boolean islet, + int maxRow, + int minCol, + int maxCol) + { this.symbol = symbol; + this.vector = vector; + this.bitmap = bitmap; + this.shift = shift; + + this.islet = islet; + this.maxRow = maxRow; + this.minCol = minCol; + this.maxCol = maxCol; + } + + private Shape (Shape shape, + int row, + int col) + { this.symbol = shape.symbol; + this.vector = shape.vector; + this.bitmap = shape.bitmap << ((SHIFT[row] + (col - (row % 2))/2) - shape.shift); + + this.islet = shape.islet; + this.maxRow = shape.maxRow; + this.minCol = shape.minCol; + this.maxCol = shape.maxCol; + } + } + + // PIECES + + private static final Shape[] PIECE0 = { new Shape ('0',new int[][] {{3, 5},{2, 4},{1, 3},{0, 2},{0, 0}},0x0000000000082083L,0,false,6,0,4), + new Shape ('0',new int[][] {{4,-2},{3,-1},{2, 0},{1, 1},{0, 0}},0x0000000000421082L,1,false,5,2,8), + new Shape ('0',new int[][] {{1,-7},{1,-5},{1,-3},{1,-1},{0, 0}},0x00000000000003D0L,4,false,8,7,9), + new Shape ('0',new int[][] {{0, 0},{1, 1},{2, 2},{3, 3},{3, 5}},0x00000000000C1041L,0,false,6,0,4), + new Shape ('0',new int[][] {{0, 0},{1,-1},{2,-2},{3,-3},{4,-2}},0x0000000000821084L,2,false,5,3,9), + new Shape ('0',new int[][] {{0, 6},{0, 4},{0, 2},{0, 0},{1,-1}},0x000000000000005EL,1,false,8,1,3), + new Shape ('0',new int[][] {{0, 0},{1, 1},{2, 2},{3, 3},{4, 2}},0x0000000000841041L,0,false,5,0,6), + new Shape ('0',new int[][] {{0, 0},{1,-1},{2,-2},{3,-3},{3,-5}},0x0000000000062108L,3,false,6,5,9), + new Shape ('0',new int[][] {{1, 7},{1, 5},{1, 3},{1, 1},{0, 0}},0x00000000000003C1L,0,false,8,0,2), + new Shape ('0',new int[][] {{4, 2},{3, 1},{2, 0},{1,-1},{0, 0}},0x0000000001041042L,1,false,5,1,7), + new Shape ('0',new int[][] {{3,-3},{2,-2},{1,-1},{0, 0},{0, 2}},0x000000000002108CL,2,false,6,3,7), + new Shape ('0',new int[][] {{0, 0},{0, 2},{0, 4},{0, 6},{1, 7}},0x000000000000020FL,0,false,8,0,2) + }; + + private static final Shape[] PIECE1 = { new Shape ('1',new int[][] {{0, 2},{0, 0},{1,-1},{2, 0},{3,-1}},0x0000000000021046L,1,false,6,1,7), + new Shape ('1',new int[][] {{1, 3},{0, 2},{0, 0},{1,-1},{1,-3}},0x00000000000002CCL,2,false,8,3,6), + new Shape ('1',new int[][] {{3, 3},{2, 4},{1, 3},{1, 1},{0, 0}},0x00000000000420C1L,0,false,6,0,5), + new Shape ('1',new int[][] {{3,-3},{3,-1},{2, 0},{1,-1},{0, 0}},0x0000000000062084L,2,false,6,3,9), + new Shape ('1',new int[][] {{0, 0},{1, 1},{1, 3},{0, 4},{0, 6}},0x00000000000000CDL,0,true, 8,0,3), + new Shape ('1',new int[][] {{0, 0},{1,-1},{2, 0},{2, 2},{3, 3}},0x0000000000083042L,1,false,6,1,6), + new Shape ('1',new int[][] {{0, 6},{1, 5},{1, 3},{0, 2},{0, 0}},0x000000000000018BL,0,true, 8,0,3), + new Shape ('1',new int[][] {{3, 3},{3, 1},{2, 0},{1, 1},{0, 0}},0x0000000000060841L,0,false,6,0,6), + new Shape ('1',new int[][] {{3,-3},{2,-4},{1,-3},{1,-1},{0, 0}},0x00000000000208C4L,2,false,6,4,9), + new Shape ('1',new int[][] {{1,-1},{0, 0},{0, 2},{1, 3},{1, 5}},0x0000000000000346L,1,false,8,1,4), + new Shape ('1',new int[][] {{0, 0},{0, 2},{1, 3},{2, 2},{3, 3}},0x0000000000041083L,0,false,6,0,6), + new Shape ('1',new int[][] {{0, 0},{1, 1},{2, 0},{2,-2},{3,-3}},0x0000000000023104L,2,false,6,3,8) + }; + + private static final Shape[] PIECE2 = { new Shape ('2',new int[][] {{1, 1},{0, 0},{2, 0},{2,-2},{2,-4}},0x0000000000003904L,2,false,7,4,8), + new Shape ('2',new int[][] {{2, 4},{1, 5},{2, 2},{1, 1},{0, 0}},0x0000000000003141L,0,false,7,0,4), + new Shape ('2',new int[][] {{3,-1},{3, 1},{2,-2},{1,-1},{0, 0}},0x0000000000060842L,1,false,6,2,8), + new Shape ('2',new int[][] {{1,-1},{2, 0},{0, 0},{0, 2},{0, 4}},0x000000000000104EL,1,false,7,1,5), + new Shape ('2',new int[][] {{0, 0},{1,-1},{0, 2},{1, 3},{2, 4}},0x0000000000004146L,1,false,7,1,5), + new Shape ('2',new int[][] {{0, 2},{0, 0},{1, 3},{2, 2},{3, 1}},0x0000000000021083L,0,true, 6,0,6), + new Shape ('2',new int[][] {{0, 2},{1, 3},{0, 0},{1,-1},{2,-2}},0x0000000000000946L,1,false,7,2,6), + new Shape ('2',new int[][] {{1, 5},{2, 4},{0, 4},{0, 2},{0, 0}},0x0000000000002107L,0,false,7,0,4), + new Shape ('2',new int[][] {{3, 1},{3,-1},{2, 2},{1, 1},{0, 0}},0x0000000000062082L,1,false,6,1,7), + new Shape ('2',new int[][] {{2,-4},{1,-5},{2,-2},{1,-1},{0, 0}},0x0000000000003148L,3,false,7,5,9), + new Shape ('2',new int[][] {{1,-1},{0, 0},{2, 0},{2, 2},{2, 4}},0x0000000000007042L,1,false,7,1,5), + new Shape ('2',new int[][] {{0, 0},{0, 2},{1,-1},{2, 0},{3, 1}},0x0000000000041046L,1,false,6,1,7) + }; + + private static final Shape[] PIECE3 = { new Shape ('3',new int[][] {{0, 0},{2, 0},{1,-1},{2,-2},{2,-4}},0x0000000000003884L,2,false,7,4,9), + new Shape ('3',new int[][] {{1, 5},{2, 2},{1, 3},{1, 1},{0, 0}},0x00000000000011C1L,0,false,7,0,4), + new Shape ('3',new int[][] {{3, 1},{2,-2},{2, 0},{1,-1},{0, 0}},0x0000000000041842L,1,false,6,2,8), + new Shape ('3',new int[][] {{2, 0},{0, 0},{1, 1},{0, 2},{0, 4}},0x0000000000000847L,0,false,7,0,5), + new Shape ('3',new int[][] {{1,-3},{0, 0},{1,-1},{1, 1},{2, 2}},0x00000000000041C4L,2,false,7,3,7), + new Shape ('3',new int[][] {{0, 0},{1, 3},{1, 1},{2, 2},{3, 1}},0x00000000000210C1L,0,true, 6,0,6), + new Shape ('3',new int[][] {{1, 3},{0, 0},{1, 1},{1,-1},{2,-2}},0x00000000000009C2L,1,false,7,2,6), + new Shape ('3',new int[][] {{2, 4},{0, 4},{1, 3},{0, 2},{0, 0}},0x0000000000002087L,0,false,7,0,5), + new Shape ('3',new int[][] {{3,-1},{2, 2},{2, 0},{1, 1},{0, 0}},0x0000000000023082L,1,false,6,1,7), + new Shape ('3',new int[][] {{1,-5},{2,-2},{1,-3},{1,-1},{0, 0}},0x00000000000021C8L,3,false,7,5,9), + new Shape ('3',new int[][] {{0, 0},{2, 0},{1, 1},{2, 2},{2, 4}},0x0000000000003841L,0,false,7,0,5), + new Shape ('3',new int[][] {{0, 0},{1,-3},{1,-1},{2,-2},{3,-1}},0x00000000000410C4L,2,false,6,3,9) + }; + + private static final Shape[] PIECE4 = { new Shape ('4',new int[][] {{1, 5},{2, 2},{1, 3},{0, 2},{0, 0}},0x0000000000001183L,0,false,7,0,4), + new Shape ('4',new int[][] {{3, 1},{2,-2},{2, 0},{1, 1},{0, 0}},0x0000000000041882L,1,false,6,2,8), + new Shape ('4',new int[][] {{2, 0},{0, 0},{1, 1},{1, 3},{0, 4}},0x00000000000008C5L,0,true, 7,0,5), + new Shape ('4',new int[][] {{1,-3},{0, 0},{1,-1},{2, 0},{2, 2}},0x00000000000060C4L,2,false,7,3,7), + new Shape ('4',new int[][] {{0, 0},{1, 3},{1, 1},{2, 0},{3, 1}},0x00000000000208C1L,0,false,6,0,6), + new Shape ('4',new int[][] {{0, 0},{2, 0},{1,-1},{1,-3},{2,-4}},0x00000000000028C4L,2,false,7,4,9), + new Shape ('4',new int[][] {{0, 0},{1,-3},{1,-1},{2, 0},{3,-1}},0x00000000000420C4L,2,false,6,3,9), + new Shape ('4',new int[][] {{1, 3},{0, 0},{1, 1},{2, 0},{2,-2}},0x0000000000001982L,1,false,7,2,6), + new Shape ('4',new int[][] {{2, 4},{0, 4},{1, 3},{1, 1},{0, 0}},0x00000000000020C5L,0,true, 7,0,5), + new Shape ('4',new int[][] {{3,-1},{2, 2},{2, 0},{1,-1},{0, 0}},0x0000000000023042L,1,false,6,1,7), + new Shape ('4',new int[][] {{1,-3},{2, 0},{1,-1},{0, 0},{0, 2}},0x00000000000020CCL,2,false,7,3,7), + new Shape ('4',new int[][] {{0, 0},{2, 0},{1, 1},{1, 3},{2, 4}},0x00000000000028C1L,0,false,7,0,5) + }; + + private static final Shape[] PIECE5 = { new Shape ('5',new int[][] {{0, 2},{1, 1},{0, 0},{1,-1},{2,-2}},0x00000000000008C6L,1,false,7,2,7), + new Shape ('5',new int[][] {{1, 5},{1, 3},{0, 4},{0, 2},{0, 0}},0x0000000000000187L,0,false,8,0,4), + new Shape ('5',new int[][] {{3, 1},{2, 0},{2, 2},{1, 1},{0, 0}},0x0000000000021841L,0,false,6,0,7), + new Shape ('5',new int[][] {{2,-4},{1,-3},{2,-2},{1,-1},{0, 0}},0x00000000000018C4L,2,false,7,4,9), + new Shape ('5',new int[][] {{0, 0},{0, 2},{1, 1},{1, 3},{1, 5}},0x00000000000001C3L,0,false,8,0,4), + new Shape ('5',new int[][] {{0, 0},{1, 1},{1,-1},{2, 0},{3, 1}},0x00000000000410C2L,1,false,6,1,8), + new Shape ('5',new int[][] {{0, 2},{0, 0},{1, 1},{1,-1},{1,-3}},0x00000000000001CCL,2,false,8,3,7), + new Shape ('5',new int[][] {{2, 4},{1, 3},{2, 2},{1, 1},{0, 0}},0x00000000000030C1L,0,false,7,0,5), + new Shape ('5',new int[][] {{3,-1},{2, 0},{2,-2},{1,-1},{0, 0}},0x0000000000021842L,1,false,6,2,9), + new Shape ('5',new int[][] {{1,-1},{1, 1},{0, 0},{0, 2},{0, 4}},0x00000000000000CEL,1,false,8,1,5), + new Shape ('5',new int[][] {{0, 0},{1, 1},{0, 2},{1, 3},{2, 4}},0x00000000000020C3L,0,false,7,0,5), + new Shape ('5',new int[][] {{0, 0},{1,-1},{1, 1},{2, 0},{3,-1}},0x00000000000210C2L,1,false,6,1,8) + }; + + private static final Shape[] PIECE6 = { new Shape ('6',new int[][] {{1, 1},{0, 0},{1,-1},{1,-3},{2,-4}},0x00000000000009C4L,2,false,7,4,8), + new Shape ('6',new int[][] {{2, 4},{1, 5},{1, 3},{0, 2},{0, 0}},0x0000000000002183L,0,false,7,0,4), + new Shape ('6',new int[][] {{3,-1},{3, 1},{2, 0},{1, 1},{0, 0}},0x0000000000061082L,1,false,6,1,8), + new Shape ('6',new int[][] {{1,-5},{2,-4},{1,-3},{1,-1},{0, 0}},0x00000000000011C8L,3,false,7,5,9), + new Shape ('6',new int[][] {{0, 0},{1,-1},{1, 1},{2, 2},{2, 4}},0x00000000000060C2L,1,false,7,1,5), + new Shape ('6',new int[][] {{0, 2},{0, 0},{1, 1},{2, 0},{3, 1}},0x0000000000020843L,0,false,6,0,7), + new Shape ('6',new int[][] {{0, 0},{1, 1},{1,-1},{2,-2},{2,-4}},0x0000000000001984L,2,false,7,4,8), + new Shape ('6',new int[][] {{1, 5},{2, 4},{1, 3},{1, 1},{0, 0}},0x00000000000021C1L,0,false,7,0,4), + new Shape ('6',new int[][] {{3, 1},{3,-1},{2, 0},{1,-1},{0, 0}},0x0000000000061042L,1,false,6,1,8), + new Shape ('6',new int[][] {{2,-2},{1,-3},{1,-1},{0, 0},{0, 2}},0x00000000000010CCL,2,false,7,3,7), + new Shape ('6',new int[][] {{1,-1},{0, 0},{1, 1},{1, 3},{2, 4}},0x00000000000041C2L,1,false,7,1,5), + new Shape ('6',new int[][] {{0, 0},{0, 2},{1, 1},{2, 2},{3, 1}},0x0000000000021043L,0,false,6,0,7) + }; + + private static final Shape[] PIECE7 = { new Shape ('7',new int[][] {{0, 2},{1, 1},{0, 0},{2, 0},{2,-2}},0x0000000000001886L,1,false,7,2,7), + new Shape ('7',new int[][] {{1, 5},{1, 3},{0, 4},{1, 1},{0, 0}},0x00000000000001C5L,0,true, 8,0,4), + new Shape ('7',new int[][] {{3, 1},{2, 0},{2, 2},{1,-1},{0, 0}},0x0000000000043042L,1,false,6,1,7), + new Shape ('7',new int[][] {{2,-2},{1,-1},{2, 0},{0, 0},{0, 2}},0x0000000000001846L,1,false,7,2,7), + new Shape ('7',new int[][] {{0, 0},{0, 2},{1, 1},{0, 4},{1, 5}},0x0000000000000147L,0,false,8,0,4), + new Shape ('7',new int[][] {{0, 0},{1, 1},{1,-1},{2, 2},{3, 1}},0x00000000000420C2L,1,false,6,1,7), + new Shape ('7',new int[][] {{0, 4},{0, 2},{1, 3},{0, 0},{1,-1}},0x000000000000014EL,1,false,8,1,5), + new Shape ('7',new int[][] {{2, 4},{1, 3},{2, 2},{0, 2},{0, 0}},0x0000000000003083L,0,false,7,0,5), + new Shape ('7',new int[][] {{3,-1},{2, 0},{2,-2},{1, 1},{0, 0}},0x0000000000021882L,1,false,6,2,8), + new Shape ('7',new int[][] {{1,-1},{1, 1},{0, 0},{1, 3},{0, 4}},0x00000000000001CAL,1,false,8,1,5), + new Shape ('7',new int[][] {{0, 0},{1, 1},{0, 2},{2, 2},{2, 4}},0x0000000000003043L,0,false,7,0,5), + new Shape ('7',new int[][] {{0, 0},{1,-1},{1, 1},{2,-2},{3,-1}},0x00000000000208C2L,1,false,6,2,8) + }; + + private static final Shape[] PIECE8 = { new Shape ('8',new int[][] {{4, 2},{3, 1},{2, 0},{1, 1},{0, 0}},0x0000000000820841L,0,false,5,0,7), + new Shape ('8',new int[][] {{3,-5},{2,-4},{1,-3},{1,-1},{0, 0}},0x0000000000021188L,3,false,6,5,9), + new Shape ('8',new int[][] {{0, 0},{0, 2},{0, 4},{1, 5},{1, 7}},0x0000000000000307L,0,false,8,0,2), + new Shape ('8',new int[][] {{0, 0},{1, 1},{2, 2},{3, 1},{4, 2}},0x0000000000821041L,0,true, 5,0,7), + new Shape ('8',new int[][] {{0, 0},{1,-1},{2,-2},{2,-4},{3,-5}},0x0000000000023108L,3,false,6,5,9), + new Shape ('8',new int[][] {{1, 7},{1, 5},{1, 3},{0, 2},{0, 0}},0x0000000000000383L,0,false,8,0,2), + new Shape ('8',new int[][] {{0, 0},{1, 1},{2, 2},{2, 4},{3, 5}},0x0000000000083041L,0,false,6,0,4), + new Shape ('8',new int[][] {{0, 0},{1,-1},{2,-2},{3,-1},{4,-2}},0x0000000000420842L,1,false,5,2,9), + new Shape ('8',new int[][] {{0, 4},{0, 2},{0, 0},{1,-1},{1,-3}},0x00000000000000DCL,2,false,8,3,5), + new Shape ('8',new int[][] {{3, 5},{2, 4},{1, 3},{1, 1},{0, 0}},0x00000000000820C1L,0,false,6,0,4), + new Shape ('8',new int[][] {{4,-2},{3,-1},{2, 0},{1,-1},{0, 0}},0x0000000000421042L,1,false,5,2,9), + new Shape ('8',new int[][] {{1,-5},{1,-3},{1,-1},{0, 0},{0, 2}},0x00000000000001D8L,3,false,8,5,7) + }; + + private static final Shape[] PIECE9 = { new Shape ('9',new int[][] {{3, 3},{2, 2},{1, 1},{0, 0},{0, 2}},0x0000000000041043L,0,false,6,0,6), + new Shape ('9',new int[][] {{3,-3},{2,-2},{1,-1},{0, 0},{1, 1}},0x0000000000021184L,2,false,6,3,8), + new Shape ('9',new int[][] {{0, 0},{0, 2},{0, 4},{0, 6},{1, 5}},0x000000000000010FL,0,false,8,0,3), + new Shape ('9',new int[][] {{0, 0},{1, 1},{2, 2},{3, 3},{3, 1}},0x0000000000061041L,0,true, 6,0,6), + new Shape ('9',new int[][] {{0, 0},{1,-1},{2,-2},{3,-3},{2,-4}},0x0000000000021884L,2,false,6,4,9), + new Shape ('9',new int[][] {{1, 5},{1, 3},{1, 1},{1,-1},{0, 0}},0x00000000000003C2L,1,false,8,1,4), + new Shape ('9',new int[][] {{0, 0},{1, 1},{2, 2},{3, 3},{2, 4}},0x0000000000043041L,0,false,6,0,5), + new Shape ('9',new int[][] {{0, 0},{1,-1},{2,-2},{3,-3},{3,-1}},0x0000000000061084L,2,false,6,3,9), + new Shape ('9',new int[][] {{0, 6},{0, 4},{0, 2},{0, 0},{1, 1}},0x000000000000004FL,0,false,8,0,3), + new Shape ('9',new int[][] {{3, 3},{2, 2},{1, 1},{0, 0},{1,-1}},0x00000000000820C2L,1,false,6,1,6), + new Shape ('9',new int[][] {{3,-1},{2, 0},{1, 1},{0, 2},{0, 0}},0x0000000000021086L,1,false,6,1,7), + new Shape ('9',new int[][] {{1,-5},{1,-3},{1,-1},{1, 1},{0, 0}},0x00000000000003C8L,3,false,8,5,8) + }; + + // CHECKSTYLE.ON: .* + + public void resetMeteor() { + for (int i = 0; i < 10; ++i) { + solution[i] = new Entry(); + } + } + + @Benchmark + public void jmhTimeMeteor() { + solve(); + resetMeteor(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/nbody.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/nbody.java new file mode 100644 index 0000000..ab5ebf3 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/nbody.java @@ -0,0 +1,204 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `nbody/nbody.java` from the archive available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Mark C. Lewis + * modified slightly by Chad Whipkey + * + * Same program, different command-line: + * -XX:MaxMetaspaceSize=3m -XX:InitialCodeCacheSize=2048K -XX:ReservedCodeCacheSize=2048K + */ + +/* + * Description: Double-precision N-body simulation. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +// CHECKSTYLE.OFF: .* +final class NBodySystem { + private Body[] bodies; + + public NBodySystem(){ + bodies = new Body[]{ + Body.sun(), + Body.jupiter(), + Body.saturn(), + Body.uranus(), + Body.neptune() + }; + + double px = 0.0; + double py = 0.0; + double pz = 0.0; + for(int i=0; i < bodies.length; ++i) { + px += bodies[i].vx * bodies[i].mass; + py += bodies[i].vy * bodies[i].mass; + pz += bodies[i].vz * bodies[i].mass; + } + bodies[0].offsetMomentum(px,py,pz); + } + + public void advance(double dt) { + + for(int i=0; i < bodies.length; ++i) { + Body iBody = bodies[i]; + for(int j=i+1; j < bodies.length; ++j) { + double dx = iBody.x - bodies[j].x; + double dy = iBody.y - bodies[j].y; + double dz = iBody.z - bodies[j].z; + + double dSquared = dx * dx + dy * dy + dz * dz; + double distance = Math.sqrt(dSquared); + double mag = dt / (dSquared * distance); + + iBody.vx -= dx * bodies[j].mass * mag; + iBody.vy -= dy * bodies[j].mass * mag; + iBody.vz -= dz * bodies[j].mass * mag; + + bodies[j].vx += dx * iBody.mass * mag; + bodies[j].vy += dy * iBody.mass * mag; + bodies[j].vz += dz * iBody.mass * mag; + } + } + + for ( Body body : bodies) { + body.x += dt * body.vx; + body.y += dt * body.vy; + body.z += dt * body.vz; + } + } + + public double energy(){ + double dx, dy, dz, distance; + double e = 0.0; + + for (int i=0; i < bodies.length; ++i) { + Body iBody = bodies[i]; + e += 0.5 * iBody.mass * + ( iBody.vx * iBody.vx + + iBody.vy * iBody.vy + + iBody.vz * iBody.vz ); + + for (int j=i+1; j < bodies.length; ++j) { + Body jBody = bodies[j]; + dx = iBody.x - jBody.x; + dy = iBody.y - jBody.y; + dz = iBody.z - jBody.z; + + distance = Math.sqrt(dx*dx + dy*dy + dz*dz); + e -= (iBody.mass * jBody.mass) / distance; + } + } + return e; + } +} + + +final class Body { + static final double PI = 3.141592653589793; + static final double SOLAR_MASS = 4 * PI * PI; + static final double DAYS_PER_YEAR = 365.24; + + public double x, y, z, vx, vy, vz, mass; + + public Body(){} + + static Body jupiter(){ + Body p = new Body(); + p.x = 4.84143144246472090e+00; + p.y = -1.16032004402742839e+00; + p.z = -1.03622044471123109e-01; + p.vx = 1.66007664274403694e-03 * DAYS_PER_YEAR; + p.vy = 7.69901118419740425e-03 * DAYS_PER_YEAR; + p.vz = -6.90460016972063023e-05 * DAYS_PER_YEAR; + p.mass = 9.54791938424326609e-04 * SOLAR_MASS; + return p; + } + + static Body saturn(){ + Body p = new Body(); + p.x = 8.34336671824457987e+00; + p.y = 4.12479856412430479e+00; + p.z = -4.03523417114321381e-01; + p.vx = -2.76742510726862411e-03 * DAYS_PER_YEAR; + p.vy = 4.99852801234917238e-03 * DAYS_PER_YEAR; + p.vz = 2.30417297573763929e-05 * DAYS_PER_YEAR; + p.mass = 2.85885980666130812e-04 * SOLAR_MASS; + return p; + } + + static Body uranus(){ + Body p = new Body(); + p.x = 1.28943695621391310e+01; + p.y = -1.51111514016986312e+01; + p.z = -2.23307578892655734e-01; + p.vx = 2.96460137564761618e-03 * DAYS_PER_YEAR; + p.vy = 2.37847173959480950e-03 * DAYS_PER_YEAR; + p.vz = -2.96589568540237556e-05 * DAYS_PER_YEAR; + p.mass = 4.36624404335156298e-05 * SOLAR_MASS; + return p; + } + + static Body neptune(){ + Body p = new Body(); + p.x = 1.53796971148509165e+01; + p.y = -2.59193146099879641e+01; + p.z = 1.79258772950371181e-01; + p.vx = 2.68067772490389322e-03 * DAYS_PER_YEAR; + p.vy = 1.62824170038242295e-03 * DAYS_PER_YEAR; + p.vz = -9.51592254519715870e-05 * DAYS_PER_YEAR; + p.mass = 5.15138902046611451e-05 * SOLAR_MASS; + return p; + } + + static Body sun(){ + Body p = new Body(); + p.mass = SOLAR_MASS; + return p; + } + + Body offsetMomentum(double px, double py, double pz){ + vx = -px / SOLAR_MASS; + vy = -py / SOLAR_MASS; + vz = -pz / SOLAR_MASS; + return this; + } +} + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +public class nbody { + // CHECKSTYLE.ON: .* + private NBodySystem bodies; + + public nbody() { + bodies = new NBodySystem(); + } + + private static final int PREDEFINED_N_STEPS = 1000; + + public void solve() { + for (int i = 0; i < PREDEFINED_N_STEPS; ++i) { + bodies.advance(0.01); + } + } + @Benchmark + public void jmhTimeNBody() { + solve(); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/pidigits.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/pidigits.java new file mode 100644 index 0000000..fffb7d1 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/pidigits.java @@ -0,0 +1,156 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `pidigits/pidigits.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Isaac Gouy + */ + +/* + * Description: Streaming arbitrary-precision arithmetic. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; +import java.math.BigInteger; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class pidigits { + static final int L = 10; + private static final int PREDEFINED_N_DIGITS = 27; + + public static void old_main() { + int n = PREDEFINED_N_DIGITS; + int j = 0; + + PiDigitSpigot digits = new PiDigitSpigot(); + + while (n > 0){ + if (n >= L){ + for (int i=0; i<L; i++) digits.next(); + j += L; + } else { + for (int i=0; i<n; i++) digits.next(); + j += n; + } + n -= L; + } + } + // CHECKSTYLE.ON: .* + @Benchmark + public void jmhTimePidigits() { + old_main(); + } +} + + +// CHECKSTYLE.OFF: .* +class PiDigitSpigot { + Transformation z, x, inverse; + + public PiDigitSpigot(){ + z = new Transformation(1,0,0,1); + x = new Transformation(0,0,0,0); + inverse = new Transformation(0,0,0,0); + } + + public int next(){ + int y = digit(); + if (isSafe(y)){ + z = produce(y); return y; + } else { + z = consume( x.next() ); return next(); + } + } + + public int digit(){ + return z.extract(3); + } + + public boolean isSafe(int digit){ + return digit == z.extract(4); + } + + public Transformation produce(int i){ + return ( inverse.qrst(10,-10*i,0,1) ).compose(z); + } + + public Transformation consume(Transformation a){ + return z.compose(a); + } +} + + +class Transformation { + BigInteger q, r, s, t; + int k; + + public Transformation(int q, int r, int s, int t){ + this.q = BigInteger.valueOf(q); + this.r = BigInteger.valueOf(r); + this.s = BigInteger.valueOf(s); + this.t = BigInteger.valueOf(t); + k = 0; + } + + public Transformation(BigInteger q, BigInteger r, BigInteger s, BigInteger t){ + this.q = q; + this.r = r; + this.s = s; + this.t = t; + k = 0; + } + + public Transformation next(){ + k++; + q = BigInteger.valueOf(k); + r = BigInteger.valueOf(4 * k + 2); + s = BigInteger.valueOf(0); + t = BigInteger.valueOf(2 * k + 1); + return this; + } + + public int extract(int j){ + BigInteger bigj = BigInteger.valueOf(j); + BigInteger numerator = (q.multiply(bigj)).add(r); + BigInteger denominator = (s.multiply(bigj)).add(t); + return ( numerator.divide(denominator) ).intValue(); + } + + public Transformation qrst(int q, int r, int s, int t){ + this.q = BigInteger.valueOf(q); + this.r = BigInteger.valueOf(r); + this.s = BigInteger.valueOf(s); + this.t = BigInteger.valueOf(t); + k = 0; + return this; + } + + public Transformation compose(Transformation a){ + return new Transformation( + q.multiply(a.q) + ,(q.multiply(a.r)).add( (r.multiply(a.t)) ) + ,(s.multiply(a.q)).add( (t.multiply(a.s)) ) + ,(s.multiply(a.r)).add( (t.multiply(a.t)) ) + ); + } +} +// CHECKSTYLE.ON: .* + + + diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/regexdna.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/regexdna.java new file mode 100644 index 0000000..63a214c --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/regexdna.java @@ -0,0 +1,1160 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `regexdna/regexdna.java-4.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * contributed by Razii, idea taken from Elliott Hughes and Roger Millington + */ + +/* + * Description: Match DNA 8-mers and substitute nucleotides for IUB codes. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +// CHECKSTYLE.OFF: .* +import java.io.*; +import java.util.regex.*; +import java.util.*; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +public class regexdna { + + private static final Map<String, String> replacements = new HashMap<String, String>(); + private InputStream stream; + private char[] cbuf; + private Reader r; + private StringBuilder sb; + static String[] variants = { "agggtaaa|tttaccct" , + "[cgt]gggtaaa|tttaccc[acg]", + "a[act]ggtaaa|tttacc[agt]t", + "ag[act]gtaaa|tttac[agt]ct", + "agg[act]taaa|ttta[agt]cct", + "aggg[acg]aaa|ttt[cgt]ccct", + "agggt[cgt]aa|tt[acg]accct", + "agggta[cgt]a|t[acg]taccct", + "agggtaa[cgt]|[acg]ttaccct" + }; + + public regexdna() { + stream = new ByteArrayInputStream(fastaStr.getBytes()); + cbuf = new char[16384]; + //TODO (jmh) Catch IOException in JMH instead of catched here. + // Because class regexdna in art-testing throws IOException not catched here. + try { + r = new InputStreamReader(stream, "ISO-8859-1"); + // Move code block below from main loop to here to reduce noise. + stream.reset(); + sb = new StringBuilder(5100000); + int charsRead; + while ((charsRead = r.read(cbuf)) != -1) + sb.append(cbuf, 0, charsRead); + // int initialLength = sb.length(); + } catch (IOException e){ + e.printStackTrace(); + } + } + + static { + + replacements.put("W", "(a|t)"); + replacements.put("Y", "(c|t)"); + replacements.put("K", "(g|t)"); + replacements.put("M", "(a|c)"); + replacements.put("S", "(c|g)"); + replacements.put("R", "(a|g)"); + replacements.put("B", "(c|g|t)"); + replacements.put("D", "(a|g|t)"); + replacements.put("V", "(a|c|g)"); + replacements.put("H", "(a|c|t)"); + replacements.put("N", "(a|c|g|t)"); + } + + static abstract class Rewriter { + private Pattern pattern; + private Matcher matcher; + + public Rewriter(String regularExpression) { + + this.pattern = Pattern.compile(regularExpression); + } + + public String group(int i) { + return matcher.group(i); + } + + public abstract String replacement(); + + public String rewrite(CharSequence original) { + return rewrite(original, new StringBuffer(original.length())).toString(); + } + + public StringBuffer rewrite(CharSequence original, StringBuffer destination) { + this.matcher = pattern.matcher(original); + while (matcher.find()) { + matcher.appendReplacement(destination, ""); + destination.append(replacement()); + } + matcher.appendTail(destination); + return destination; + } + } + + public static void main(String [] args) throws Exception { + regexdna rd = new regexdna(); + for (int i = 0; i < 100; i++) + rd.old_main(); + } + + public int old_main() throws IOException { + + String sequence = new Rewriter(">.*\n|\n") { + + public String replacement() { + return ""; + } + }.rewrite(sb); + + // int codeLength = sequence.length(); + + int count = 0; + for (String variant : variants) { + + Matcher m = Pattern.compile(variant).matcher(sequence); + while (m.find()) + count++; + } + + sequence = new Rewriter("[WYKMSRBDVHN]") { + + public String replacement() { + return replacements.get(group(0)); + } + }.rewrite(sequence); + + return count; + } + // CHECKSTYLE.ON: .* + + @Benchmark + public void jmhTimeRegexDna() throws IOException { + old_main(); + } + + private static final String fastaStr = ">ONE Homo sapiens alu\n" + + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n" + + "TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n" + + "AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n" + + "GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n" + + "CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n" + + "GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n" + + "GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n" + + "TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n" + + "AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n" + + "GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n" + + "AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n" + + "AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n" + + "GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n" + + "CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n" + + "AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n" + + "TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n" + + "TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n" + + "GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n" + + "TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n" + + "CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n" + + "CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n" + + "TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n" + + "CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n" + + "AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n" + + "GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n" + + "TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n" + + "TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n" + + "GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n" + + "GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n" + + "ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n" + + "TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n" + + "CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n" + + "CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n" + + "GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n" + + "CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n" + + "GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n" + + "GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n" + + "GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n" + + "GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n" + + "GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n" + + "AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n" + + "CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n" + + "GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n" + + "AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n" + + "GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n" + + "ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n" + + "GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC\n" + + "GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC\n" + + "GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\n" + + "TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA\n" + + "AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG\n" + + "GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT\n" + + "CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC\n" + + "TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG\n" + + "ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC\n" + + "GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA\n" + + "ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA\n" + + "CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA\n" + + "CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA\n" + + "ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG\n" + + "CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG\n" + + "AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC\n" + + "CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG\n" + + "AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC\n" + + "CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG\n" + + "CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG\n" + + "CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG\n" + + "CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC\n" + + "ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA\n" + + "AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC\n" + + "TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC\n" + + "ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG\n" + + "CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG\n" + + "AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT\n" + + "AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA\n" + + "TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC\n" + + "CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA\n" + + "TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG\n" + + "CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT\n" + + "GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG\n" + + "GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG\n" + + "CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG\n" + + "GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG\n" + + "GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT\n" + + "AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT\n" + + "GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT\n" + + "CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG\n" + + "GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC\n" + + "TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT\n" + + "CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG\n" + + "ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG\n" + + "CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG\n" + + "AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA\n" + + "CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG\n" + + "CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC\n" + + "ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC\n" + + "GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC\n" + + "GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG\n" + + "GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT\n" + + "TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG\n" + + "CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA\n" + + "GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG\n" + + "CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC\n" + + "GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG\n" + + "CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA\n" + + "CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG\n" + + "CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA\n" + + "ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC\n" + + "CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT\n" + + "GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA\n" + + "AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG\n" + + "ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC\n" + + "TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA\n" + + "GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC\n" + + "GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG\n" + + "TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC\n" + + "AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA\n" + + "ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA\n" + + "GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\n" + + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG\n" + + "TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC\n" + + "CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT\n" + + "GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC\n" + + "CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA\n" + + "GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT\n" + + "TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC\n" + + "ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC\n" + + "TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG\n" + + "GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG\n" + + "TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG\n" + + "GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC\n" + + "GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT\n" + + "ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC\n" + + "GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC\n" + + "GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC\n" + + "CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA\n" + + "ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG\n" + + "AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC\n" + + "TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT\n" + + "CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG\n" + + "TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG\n" + + "CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC\n" + + "GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT\n" + + "GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC\n" + + "CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC\n" + + "TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG\n" + + "CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\n" + + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG\n" + + "AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG\n" + + "AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT\n" + + "GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA\n" + + "TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC\n" + + "AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA\n" + + "AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG\n" + + "CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC\n" + + "TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG\n" + + "GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT\n" + + "CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG\n" + + "CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG\n" + + "GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA\n" + + "AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA\n" + + "GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC\n" + + "TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC\n" + + "CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA\n" + + "GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\n" + + "CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG\n" + + "AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG\n" + + "ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC\n" + + "ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC\n" + + "AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC\n" + + "GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG\n" + + "GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT\n" + + "CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC\n" + + "GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC\n" + + "CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\n" + + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA\n" + + "GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG\n" + + "GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT\n" + + "CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA\n" + + "AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG\n" + + "CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC\n" + + "CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG\n" + + "GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG\n" + + "GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT\n" + + "TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA\n" + + "ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG\n" + + "CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA\n" + + "ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA\n" + + "GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG\n" + + "TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC\n" + + "GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA\n" + + "GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT\n" + + "GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT\n" + + "GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG\n" + + "TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT\n" + + "TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC\n" + + "TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC\n" + + "GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT\n" + + "CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC\n" + + "TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA\n" + + ">TWO IUB ambiguity codes\n" + + "cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg\n" + + "tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa\n" + + "NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt\n" + + "cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga\n" + + "gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa\n" + + "HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca\n" + + "tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt\n" + + "tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt\n" + + "acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct\n" + + "tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt\n" + + "gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa\n" + + "accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt\n" + + "RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt\n" + + "tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag\n" + + "cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg\n" + + "ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat\n" + + "actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg\n" + + "YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa\n" + + "KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata\n" + + "aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa\n" + + "aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg\n" + + "gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc\n" + + "tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK\n" + + "tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt\n" + + "ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg\n" + + "ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa\n" + + "BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt\n" + + "aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc\n" + + "tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc\n" + + "cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac\n" + + "aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga\n" + + "tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga\n" + + "aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD\n" + + "gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg\n" + + "ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV\n" + + "taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa\n" + + "ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat\n" + + "gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg\n" + + "gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa\n" + + "tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt\n" + + "tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt\n" + + "taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca\n" + + "cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag\n" + + "aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt\n" + + "cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt\n" + + "ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW\n" + + "attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag\n" + + "ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa\n" + + "attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc\n" + + "tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta\n" + + "aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata\n" + + "cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc\n" + + "gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg\n" + + "attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca\n" + + "BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga\n" + + "DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat\n" + + "tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM\n" + + "tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR\n" + + "tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg\n" + + "taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc\n" + + "aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc\n" + + "DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa\n" + + "VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt\n" + + "agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat\n" + + "gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt\n" + + "tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt\n" + + "catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt\n" + + "tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR\n" + + "aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat\n" + + "aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac\n" + + "acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS\n" + + "tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga\n" + + "aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM\n" + + "acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt\n" + + "RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt\n" + + "RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta\n" + + "tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac\n" + + "gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt\n" + + "YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc\n" + + "ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt\n" + + "ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat\n" + + "gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta\n" + + "KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD\n" + + "aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg\n" + + "gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH\n" + + "taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact\n" + + "VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV\n" + + "NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa\n" + + "MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag\n" + + "cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata\n" + + "ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg\n" + + "tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN\n" + + "aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc\n" + + "actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg\n" + + "tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga\n" + + "gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa\n" + + "BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca\n" + + "aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata\n" + + "aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat\n" + + "YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt\n" + + "aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW\n" + + "cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata\n" + + "tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata\n" + + "tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt\n" + + "MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac\n" + + "taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta\n" + + "tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS\n" + + "RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc\n" + + "agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata\n" + + "NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa\n" + + "gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata\n" + + "aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt\n" + + "ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW\n" + + "cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt\n" + + "tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa\n" + + "RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt\n" + + "tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD\n" + + "gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc\n" + + "tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta\n" + + "ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM\n" + + "tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc\n" + + "ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc\n" + + "BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt\n" + + "gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga\n" + + "acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag\n" + + "gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc\n" + + "taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat\n" + + "acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta\n" + + "tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt\n" + + "catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa\n" + + "tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB\n" + + "atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR\n" + + "ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta\n" + + "ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta\n" + + "cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK\n" + + "SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW\n" + + "VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc\n" + + "BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct\n" + + "NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt\n" + + "tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa\n" + + "ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa\n" + + "cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa\n" + + "VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR\n" + + "atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac\n" + + "aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc\n" + + "tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac\n" + + "RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag\n" + + "gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc\n" + + "tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact\n" + + "attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc\n" + + "atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga\n" + + "cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt\n" + + "NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR\n" + + "ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat\n" + + "cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg\n" + + "aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac\n" + + "agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR\n" + + "tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga\n" + + "ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg\n" + + "ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa\n" + + "tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag\n" + + "taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg\n" + + "tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN\n" + + "YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt\n" + + "ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa\n" + + "tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat\n" + + "ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg\n" + + "attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt\n" + + "atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW\n" + + "YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta\n" + + "gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV\n" + + "MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta\n" + + "tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt\n" + + "ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa\n" + + "aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa\n" + + "BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM\n" + + "tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK\n" + + "StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV\n" + + "cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN\n" + + "atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg\n" + + "atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg\n" + + "ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct\n" + + "gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM\n" + + "tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD\n" + + "BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc\n" + + "agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga\n" + + "HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR\n" + + "tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt\n" + + "aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa\n" + + "catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB\n" + + "aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat\n" + + "tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt\n" + + "cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag\n" + + "DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat\n" + + "gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta\n" + + "tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM\n" + + "atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc\n" + + "KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt\n" + + "tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata\n" + + "tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK\n" + + "taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt\n" + + "NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa\n" + + "HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa\n" + + "ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg\n" + + "tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK\n" + + "cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga\n" + + "ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca\n" + + "HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg\n" + + "gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS\n" + + "BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg\n" + + "gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat\n" + + "KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact\n" + + "cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat\n" + + "tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD\n" + + "taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM\n" + + "gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt\n" + + "aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat\n" + + "acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta\n" + + "RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc\n" + + "attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac\n" + + "KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS\n" + + "KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD\n" + + "gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB\n" + + "aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct\n" + + "aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga\n" + + "ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY\n" + + "tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga\n" + + "aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta\n" + + "tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY\n" + + "MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc\n" + + "cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta\n" + + "caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt\n" + + "ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc\n" + + "acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat\n" + + "tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc\n" + + "gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa\n" + + "atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga\n" + + "aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat\n" + + "NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt\n" + + "taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa\n" + + "aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat\n" + + "ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca\n" + + "DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata\n" + + "tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat\n" + + "aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa\n" + + "ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM\n" + + "ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca\n" + + "RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa\n" + + "aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac\n" + + "aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt\n" + + "aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK\n" + + "tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat\n" + + "atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR\n" + + "BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc\n" + + "gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct\n" + + "cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN\n" + + "RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat\n" + + "taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt\n" + + "aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt\n" + + "gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct\n" + + "gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa\n" + + "aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta\n" + + "gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg\n" + + "ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat\n" + + "MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct\n" + + "SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY\n" + + "aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt\n" + + "VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat\n" + + "HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc\n" + + "agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt\n" + + "gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg\n" + + "agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg\n" + + "tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag\n" + + "gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga\n" + + "VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg\n" + + "tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV\n" + + "MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt\n" + + "actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa\n" + + "WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa\n" + + "tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD\n" + + "KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct\n" + + "BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac\n" + + "attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB\n" + + "VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD\n" + + "aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca\n" + + "tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat\n" + + "tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK\n" + + "tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt\n" + + "VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta\n" + + "tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat\n" + + "ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa\n" + + "tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg\n" + + "WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta\n" + + "tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc\n" + + "tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct\n" + + "MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat\n" + + "tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac\n" + + "atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg\n" + + "aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt\n" + + "aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa\n" + + ">THREE Homo sapiens frequency\n" + + "aagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgtacctaaacctaca\n" + + "tcgtatgtatttgctgacgttcattcttgatacataaagatccgatatcggtccactttg\n" + + "tttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatg\n" + + "gggatattgccggtgagtacaagttagaccacacattagaactgacctatattcgtcatc\n" + + "atagagatggagtatgaattgattctgcgaagtacactggctttacgagtatctagacgc\n" + + "cgcggtatatctcccgtcaatactatgaaggtatatatatagaggctgaaaattcatgtt\n" + + "caatcctctttctaagagtgagtgggagccccttctgttgtcggagtaaaaaggcattat\n" + + "tcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaaaagagttacctt\n" + + "agggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtgcgattaattctt\n" + + "ttgatgacagatctcattattttatatagctccctctttgtatttagagtttgcgtaggt\n" + + "aacctggcaaaaccatatcccggggggagagtgcgctgaacattttatacgatgtgatta\n" + + "ctcaaaggataaggttcgaggcctctatactcatggaactatcttataattataatggat\n" + + "cgtggctcattccacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaac\n" + + "gtacatcttctaaggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaa\n" + + "atatttttaaaaattgattctactgcgaggaactaaggtgtagacaagcccttagtaacc\n" + + "ggtggatgtcgcttcagttttatagcaaacattattcaatttcagtcttgactgaaatta\n" + + "gtttgttagtgttagaggtccatatgtcacatgcatatggtctagatgccattgtacagt\n" + + "aataccttagattagtattagcggcatgcgtacttggatttcacttgtaagaatgagctt\n" + + "aggacggtcgcctgtagggctgcaaataggaatacttacaatttttgatgacttgttagc\n" + + "atatcgctatcacccataaaaaacctgatacttgatgagcgggtgattgagactatgtac\n" + + "tgatataattcaatagctccaatagatgaaacagctatgcgcctatttatgtcaaataat\n" + + "cgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcggtgatctctatcc\n" + + "taaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagt\n" + + "taaatttgcatctcatgccccacgaagaatgggtagagagtttgaaggtgcttctggatt\n" + + "ttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaacc\n" + + "acaaacccctgggtgaatctgattagccaacccagtgatctgatttcagttgtcaaatct\n" + + "cttttttataactaccttttgtttccataatttaaccggatctcataatgaacaaacggg\n" + + "tagaataatggtagcacatagcgagcttgtctattcagaaatatggcctactcagaatgt\n" + + "attctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttat\n" + + "cggttccttgtactacaatactcttgcccaacaaatactaagcataacagcaaaattcga\n" + + "atccccctccttttaataaatggtttttcaatatagccgattcgtattcgttagtctttc\n" + + "accaactattaacctggcatctaattaataaaatcaccaaaggactctataatatgacag\n" + + "tcacttcggcctcttttaagacagttgattattgcaggtccgcaattgatggtgacatgc\n" + + "acaattagttagaatccgactatggagacaattaacaattgtagtgcccatttggtccag\n" + + "ttgacttcaaccacgagttataaaggtattttaatttatagtcgatagtaccaacaacaa\n" + + "gcacaatcataattatgttagaaaacccagggggtaatgctctaaatccagctttaaggc\n" + + "cagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctagg\n" + + "aggtgccgagtgagaatatcagataccttatgaagcaacgattatatctggactagatca\n" + + "tgatgatcggaataaaacattgaaataagtccttatcaaggagcataaacattttattta\n" + + "atttatacttcgtaaataaattcagaattttttttcaagacattaatctgagtaaatgac\n" + + "ggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgc\n" + + "gtttttactgaaacaaaggttcaccggaaagaaggctgccacttttagcttcttgacgat\n" + + "ctttagcgtcatatttttagattagtcgaaaaacggaaaacaaacttaacgaagctggtt\n" + + "gcacggggtaccgagaaaccaaagagcaggacaactccttgatcgggaagaactgaaata\n" + + "gacagctgtcattttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgc\n" + + "atgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttgactaattgatga\n" + + "agcaaacaaaatagccggtattcgttaaaaggaacgggttgccagctacagatatactct\n" + + "aggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcataatacttgtcac\n" + + "ataaacaagatcgctgaattaaacattaaacagttagtgatacacaatcgtggttggggc\n" + + "tgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaa\n" + + "cattattatttcttgacaatggaatcgataagcgttcctctaacttggtatatatatctc\n" + + "gaccccgggattccagccattcttgtatgaagatttaaccatttaactatgcatagttga\n" + + "atggtaaggaaaatgatattgactgcaacagattttggatgcaaaaatatttgtgaatta\n" + + "ttggttatatactggttgtatagcacaatcattaggtcctagaaggcatactcaacctca\n" + + "gcgagagagctagcatgcataattgtaccgcccatattaatattcctgaaatgatttctt\n" + + "acattacgcccaatttcagtcatcgaacacccccatcaatttacccgatagagaacgtga\n" + + "tcatacgcaataccctatgcgaacgtccactctatagcgtctgtatacaatgattattcg\n" + + "ttccatttacaacgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctc\n" + + "ctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgt\n" + + "acgaatgaaaggccacttttagaagagacctttgtatccattgtggagaatatcataaat\n" + + "tcaagatggggtgtcatgctattcggtcctaaacattcttaatggctgttctattgttag\n" + + "tctgatttaaaatggaaccatagcacgaatagttagatagggctcatacccctgtaacga\n" + + "tctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatca\n" + + "aagaacactcacacgtcagattattacactgatacgaattatttcagtcgacagtaattg\n" + + "aatagaaacttattaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttg\n" + + "actgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagt\n" + + "tttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaa\n" + + "gatcacacatcacacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtag\n" + + "tgggatcaacatatggacgaatttatgctcaatgagccaacctcccccgcattgcggttc\n" + + "attttaaggcctgggtaacatctatcgtttagataatcaaaggaatccgactatgcaatt\n" + + "gtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaatacc\n" + + "atattgaaatcgtaatacgataattgttgctattgactacaggttatgaaaaaacttact\n" + + "ttgcgggtacatgcatatttttgtaccacattattacgcgatatctctcagtgtactcta\n" + + "aattaaaccctcttcgaacattttagttcctattcgtaaacacgtgctacgcggcaattt\n" + + "gccggtcgtagaatggacaactccagttcaactgcatgtaactcatagctcgcgttagta\n" + + "taaattgactagtagccatgggacaaagtaactagtcagcggaaaagatccctttaaaga\n" + + "tatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagc\n" + + "gtctctatcgtatcttctaattttgggccgtgagaatcgaaactactctgatttgctgca\n" + + "cacgttaggtaatatcgcccattttcccgtataagctccgtacttatacgaactacacga\n" + + "ccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtctattaaaattac\n" + + "agacatactccatatctcgctccttgaactttgaataatgcgctaacttgtactatgaat\n" + + "aggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacatgttgtcagattt\n" + + "atgattatctagttttagatcacgtttaccgataatcggctgtggtctgagcagtcctac\n" + + "actgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaa\n" + + "tacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaa\n" + + "ccatttttacgatttttactatagcggtcatgaagtgcgaaactgcttgcaaattttcta\n" + + "cacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccag\n" + + "ggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccatatacctaacgcc\n" + + "ataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcag\n" + + "cacagactaactttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaag\n" + + "tcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatttctactattgtc\n" + + "agctgtacgactgtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttat\n" + + "gaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaatcctggcttaccc\n" + + "gattctccggaagtctgacctagagattgacgacggccgcgtattattgagacctcttca\n" + + "ggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaagccgactccgct\n" + + "acacgagtttctactaaaccaatgtagccttatgcttagatgaataccgtcctaattaga\n" + + "tattccggcataacagcagtaaattatctgttcaatggacgaacattgaattgttagtat\n" + + "tctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatg\n" + + "cttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacac\n" + + "cagcatattctatatgctagacgtcttccttaaaggatcgtagtattataattaataata\n" + + "agaaatatggttgacgtctagtcagcgggcatacgctgctctatatactggcattattca\n" + + "aaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgg\n" + + "gaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaataaaaaaaatgtta\n" + + "atagtacgtttacgacattttattttataataaagagaaactattacacctattgatatg\n" + + "ataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttctacatggtatag\n" + + "acctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaatctagtcattta\n" + + "ctactgtctttcgagctattataccacttcactatgtggtgtttctttgctatgtatggg\n" + + "gctagtcaaacatgatgactatagctacaactcagagagcgggcgtgttaagagtatctc\n" + + "atgctagaactgcacgacgaacttgatacaaagtaacaacatttacgattccacaaggtg\n" + + "actttgaagaaacatagtttaattctctgcttcgatcatttctataaaccggtaccatcg\n" + + "cagcggatagatgcataacatttctactactccaggcatcttaaaacacacgtagtactt\n" + + "cactagattaagacacgataagtgtataacttggcagtgggaagcaaggagattggcgaa\n" + + "ctcctggcatctgttacgttttgttcaggctcggttgttgataatgtccgactcctgcca\n" + + "tattgaagactcgctcgagggagatcgggattcgttgattataagtacacgtgttccgta\n" + + "atactatgaggcagtgattcaaaatggcacttctgacttacatgactaggtattattacc\n" + + "acggaagcgttaaaggcacactcttatggacttaagattgcaagtgccttcttctagcct\n" + + "gaattcgcgggttcaacacaaactctctttagacatccgttgcctaaaggctgagacgta\n" + + "ggggcaaccctttaactatgtactaaaaaactagttggtaatttaacaacgtgtccaatc\n" + + "aagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtga\n" + + "taaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataa\n" + + "cctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagca\n" + + "tacatttaggtctcctgcattgcattcaattgaatcgtttgtattatgagctgtacagta\n" + + "gctatatcagctatagttatcccagaggaacaggtaaactagctctgagcgtgaaatccg\n" + + "gatattagaacccctagatgggattgattctagctaatacaggcttatctggttttacag\n" + + "ttatctagatgattggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtat\n" + + "tgcccgggaagctattttctaggtattataaagtcgagcattaatatcaatttgacagta\n" + + "aaggtctttcaccagcttcatatgccatagggcccatactcgatttaaattgaacggttt\n" + + "aacgagtattggaactctcacttataactgagtagctatacgaaaaatctggtccatttc\n" + + "cagaaatttattatcgatttgctgcttagtacccaggaagtgataacccttgaaggcaca\n" + + "acactgtaataagttttcctgtcacatctgtaatattcggtcactacgcattcacgacta\n" + + "aagataattactatactaattaaaagttcaatgttagggccgaatcatagtagaaattct\n" + + "cgtctagcctaatcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaa\n" + + "tgctagagataggtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagtt\n" + + "cgcttctttagtccgggcgtttgggatgacaactactatacgtagagccgtactcaggat\n" + + "tagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtt\n" + + "taggccaaacattaaccgttgtagggatattctaatacaggccttcaccgaaccctaatg\n" + + "ataatctgtcttaataacattaaatgattgtctccgctacgagctcttagggcctcattt\n" + + "taaatgactaatgtccaaagaagagactttcccaatttcaatctgtcacgtatagacggc\n" + + "accttagtgagtcatatcattaagatagaagattatcaggagggaagtttctattatcaa\n" + + "ccgttacgcaaccataaacttttaaatctcataatggcattgagatcaagagctttcatg\n" + + "atggtaaagttcgtatgtgatgctggggagctagatatcggtataccacttcggttgtgg\n" + + "taagcccgagtgggccgttagtaatattaatagacgattatccgacaatgcattcgctga\n" + + "aataatcttacttaggagaaattaatgctatgagccaaaactatttatgtctgtcacatt\n" + + "attgactaaagtatctatcgacaaaactgatgtccataagttgtagcagatagtcggtgt\n" + + "atggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaa\n" + + "attgcctattatacagataggcttgtttagtcagataaggttccgcttgaggtgctctaa\n" + + "cttagcgagagttagaaagcctagtgagaggcattttggtgccaaactccggctcgcatg\n" + + "agtaggccagagagtcactttctttcgtcgaagaagttggtgaacagccttttgattagt\n" + + "tgtttgtcttgtggctatgtgctactatataagttagaacgcaaactaatctaatcagca\n" + + "aagtaaaataggaccttgaacgagacggggtacgccgttgaggctcgagatagtagataa\n" + + "actagaggaatgtagataaaacattagctagggggtttagttactggattacataggaag\n" + + "tgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggactta\n" + + "acaagttcgtgcataatgaaatcctatacggactttgcatatctctaccgactcatctgg\n" + + "tcgtctatgcgggtaattgtattgctccaagtggatgactattttggcgtcccagcacat\n" + + "agtaaatgtaaatccttataatagcataagcaattattagactgcgtgaagtcttagtag\n" + + "ttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccat\n" + + "tgaggtcattgaatgtacggagcactattatcaatgcggtatgcgattttctgagcgatt\n" + + "attgttaaagacttagcgttgagccccggaacacttgattacagattctttaaggagtta\n" + + "tccaaatatcattttaaataatagtagtatcgtgctttggacaataaaaaaagacccgtt\n" + + "ctcttatgttgttttgcgacgtacttctctgatatatacttcaactatgaagattctatt\n" + + "catcgataacccaggtatatttatatgcccgttcactgcgcagggcaaattatctacgga\n" + + "caataatgacgtagttggacccggtaagaactaacgcttaatatgattaaggatgtatgc\n" + + "cagtattatcttattatgtcagagtagaagtttctctgagattttccgtcgttgtggtac\n" + + "accggatttggctctctttttagaactgagaactcggagtgtgtagtcttgtttccttca\n" + + "atttatcaatatgcttttataccgccctcatcaactataacaggacgacaagttccgtct\n" + + "tgctccatcatatactaccgatacaccaatcgtatcaagtttagtatacttgctttctct\n" + + "cttctacagcttactcgcttgtccgagaagcggttggtgctcataaagttagtagtaaat\n" + + "gtacaactagtagccagtccttacctgtttttacgactactacggacaccatgagataca\n" + + "gaagttagtgctacaattataccattacatgctcaatatcgttgtcggccataagatcga\n" + + "agagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacaca\n" + + "ctccccttgttgactaacatcttttacaagaggctaaatcattgtccaggatcgaatacc\n" + + "ttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtagtatgatttacaa\n" + + "aaaacatctatgtgagtaggccaattgtagtagaatatattcatttgaccgtcattagcc\n" + + "ttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcga\n" + + "tttcatacagctgccaacaccttttttaccaggctagagtcagaaaagttggagccatgt\n" + + "taaatagttaccatcataaaccactgttgtctactagtctgatcagctttcatgcctgtg\n" + + "caagcaatatggattctcacgtaatggtaacaactgttgcgttacttaggctggttaatt\n" + + "tgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcc\n" + + "taggaataggaaaagtaaagctcttttattctgatagtgactaactcaggatctaaatac\n" + + "gcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgaccagttatagaca\n" + + "gggtaattcaatatttaatgtctcccttaacatttcaccagcatggattgaagatagtat\n" + + "aaagttttacatggcagtcattgtgtcacggttctatacaaattctgatagttagacggt\n" + + "atttgaaatgtgcttctagcatggtatcttacacaactgaatgaacgactggagccgttc\n" + + "gtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaatatagtataatat\n" + + "aaattgtgatatgaataacacaagtaactacagtttggacaattaattgttctaaactaa\n" + + "aaatcattcacttcagatggcatagagttatggctactacacatataaagcggtatgtga\n" + + "aacacccgttttagccggaaaccctctactgctcgggacaatgaatgatttccaaaatat\n" + + "ggatgtgcagaattgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtc\n" + + "gttgcaaagtttaaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaa\n" + + "acgtgacagaaagtctagaagaactgtgaataatgtctattactgattaactagtaagac\n" + + "attagtgcatctggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtc\n" + + "gtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaag\n" + + "gtcaatttcacaatatccgatcacattgtgctaggttcgtcctttaccttgcttagtgct\n" + + "gcatgtacggggtgtcatgacttgttatcggcagactctttatcccaagaatggataata\n" + + "tgtacatggaaagtgtccataattaagtcccttcactgtaaagaatgactgccacgtgat\n" + + "ccatgaggtctacagaaaccgacttacttgctttttgatcaacttaattatggattcata\n" + + "aagttcagatatcggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatc\n" + + "tgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgttacaccactcat\n" + + "tagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaa\n" + + "ctggatgtacgacgatcgagacgaagaggtatatataacctaaatactaggtacgttgtt\n" + + "agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct\n" + + "cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt\n" + + "tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat\n" + + "tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc\n" + + "gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc\n" + + "tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg\n" + + "tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat\n" + + "atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag\n" + + "cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa\n" + + "ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt\n" + + "ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat\n" + + "atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc\n" + + "gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact\n" + + "tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag\n" + + "gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg\n" + + "atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag\n" + + "tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac\n" + + "ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag\n" + + "tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta\n" + + "aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt\n" + + "gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa\n" + + "ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc\n" + + "agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt\n" + + "agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat\n" + + "acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc\n" + + "cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct\n" + + "cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct\n" + + "cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa\n" + + "aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt\n" + + "tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt\n" + + "atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct\n" + + "cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga\n" + + "tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat\n" + + "catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc\n" + + "tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg\n" + + "caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc\n" + + "tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc\n" + + "aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag\n" + + "aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat\n" + + "ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac\n" + + "gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag\n" + + "ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt\n" + + "cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta\n" + + "gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca\n" + + "ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt\n" + + "cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg\n" + + "taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg\n" + + "gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc\n" + + "taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt\n" + + "ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt\n" + + "aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt\n" + + "gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta\n" + + "acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct\n" + + "ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta\n" + + "tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt\n" + + "tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg\n" + + "tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa\n" + + "ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac\n" + + "aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga\n" + + "tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca\n" + + "gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt\n" + + "gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc\n" + + "cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg\n" + + "actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa\n" + + "tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg\n" + + "ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt\n" + + "ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta\n" + + "agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc\n" + + "gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa\n" + + "tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt\n" + + "atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca\n" + + "cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa\n" + + "tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca\n" + + "gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg\n" + + "gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat\n" + + "aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg\n" + + "gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat\n" + + "cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa\n" + + "taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg\n" + + "tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt\n" + + "ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac\n" + + "aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc\n" + + "gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag\n" + + "aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc\n" + + "tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa\n" + + "tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata\n" + + "aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta\n" + + "ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc\n" + + "ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc\n" + + "caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct\n" + + "gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg\n" + + "cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc\n" + + "ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta\n" + + "tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg\n" + + "atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc\n" + + "ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc\n" + + "acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc\n" + + "taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga\n" + + "ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga\n" + + "aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat\n" + + "cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc\n" + + "tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact\n" + + "gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa\n" + + "aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag\n" + + "cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc\n" + + "cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa\n" + + "gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg\n" + + "cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg\n" + + "gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca\n" + + "agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac\n" + + "aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt\n" + + "aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg\n" + + "cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt\n" + + "agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg\n" + + "cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa\n" + + "agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga\n" + + "gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta\n" + + "aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata\n" + + "agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc\n" + + "cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc\n" + + "agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca\n" + + "ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga\n" + + "tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag\n" + + "gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat\n" + + "gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt\n" + + "ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg\n" + + "gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc\n" + + "atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc\n" + + "tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata\n" + + "ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg\n" + + "tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag\n" + + "cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg\n" + + "ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat\n" + + "aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg\n" + + "gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat\n" + + "ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag\n" + + "atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac\n" + + "aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct\n" + + "gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga\n" + + "atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt\n" + + "aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt\n" + + "tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg\n" + + "ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta\n" + + "gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac\n" + + "cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct\n" + + "ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga\n" + + "ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg\n" + + "ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat\n" + + "cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga\n" + + "tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt\n" + + "tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc\n" + + "cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt\n" + + "gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct\n" + + "ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt\n" + + "ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa\n" + + "tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc\n" + + "agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta\n" + + "ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc\n" + + "cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct\n" + + "agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc\n" + + "tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc\n" + + "gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga\n" + + "ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa\n" + + "ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca\n" + + "agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata\n" + + "attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact\n" + + "ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat\n" + + "agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat\n" + + "aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata\n" + + "gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta\n" + + "gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg\n" + + "ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac\n" + + "gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata\n" + + "ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat\n" + + "taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta\n" + + "aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata\n" + + "tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata\n" + + "ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga\n" + + "agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt\n" + + "ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt\n" + + "agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg\n" + + "gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa\n" + + "tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg\n" + + "gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct\n" + + "cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc\n" + + "ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta\n" + + "cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt\n" + + "gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc\n" + + "gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc\n" + + "tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt\n" + + "cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca\n" + + "aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac\n" + + "ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac\n" + + "gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag\n" + + "aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga\n" + + "gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct\n" + + "aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta\n" + + "gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat\n" + + "agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat\n" + + "caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta\n" + + "gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta\n" + + "aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt\n" + + "tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt\n" + + "tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc\n" + + "ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg\n" + + "ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg\n" + + "gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa\n" + + "ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa\n" + + "aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa\n" + + "tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat\n" + + "acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac\n" + + "atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga\n" + + "gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac\n" + + "tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc\n" + + "cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa\n" + + "gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg\n" + + "acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga\n" + + "acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga\n" + + "attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg\n" + + "tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt\n" + + "cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag\n" + + "aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac\n" + + "ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac\n" + + "tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat\n" + + "gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga\n" + + "gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc\n" + + "acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta\n" + + "gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac\n" + + "gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc\n" + + "ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt\n" + + "taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg\n" + + "agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa\n" + + "gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag\n" + + "ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc\n" + + "accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag\n" + + "tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact\n" + + "taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga\n" + + "catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat\n" + + "tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga\n" + + "ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg\n" + + "aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa\n" + + "atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa\n" + + "tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt\n" + + "ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact\n" + + "tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt\n" + + "aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat\n" + + "agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc\n" + + "acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc\n" + + "aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct\n" + + "ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat\n" + + "gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat\n" + + "taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata\n" + + "taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga\n" + + "tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat\n" + + "gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg\n" + + "ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa\n" + + "atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat\n" + + "tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat\n" + + "cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt\n" + + "aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac\n" + + "taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag\n" + + "caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata\n" + + "ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct\n" + + "tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac\n" + + "tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg\n" + + "gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta\n" + + "gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat\n" + + "gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg\n" + + "ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa\n" + + "tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa\n" + + "taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac\n" + + "gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt\n" + + "ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga\n" + + "gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca\n" + + "tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc\n" + + "ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt\n" + + "tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc\n" + + "cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat\n" + + "ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg\n" + + "caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg\n" + + "cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat\n" + + "gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat\n" + + "cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg\n" + + "taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat\n" + + "tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata\n" + + "taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc\n" + + "tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac\n" + + "tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt\n" + + "tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt\n" + + "ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt\n" + + "aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg\n" + + "atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga\n" + + "actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta\n" + + "gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga\n" + + "ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga\n" + + "gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct\n" + + "tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc\n" + + "aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta\n" + + "atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt\n" + + "catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc"; +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/revcomp.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/revcomp.java new file mode 100644 index 0000000..0c2f88d --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/revcomp.java @@ -0,0 +1,1103 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `revcomp/revcomp.java-4.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * contributed by Anthony Donnefort + * slightly modified to read 82 bytes at a time by Razii + */ + +/* + * Description: Read DNA sequences - write their reverse-complement. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.io.*; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class revcomp { + private ReversibleByteArray buf = new ReversibleByteArray(); + InputStream stream = new ByteArrayInputStream(fastaStr.getBytes()); + static final byte[] cmp = new byte[128]; + static { + for (int i = 0; i < cmp.length; i++) cmp[i] = (byte) i; + cmp['t'] = cmp['T'] = 'A'; + cmp['a'] = cmp['A'] = 'T'; + cmp['g'] = cmp['G'] = 'C'; + cmp['c'] = cmp['C'] = 'G'; + cmp['v'] = cmp['V'] = 'B'; + cmp['h'] = cmp['H'] = 'D'; + cmp['r'] = cmp['R'] = 'Y'; + cmp['m'] = cmp['M'] = 'K'; + cmp['y'] = cmp['Y'] = 'R'; + cmp['k'] = cmp['K'] = 'M'; + cmp['b'] = cmp['B'] = 'V'; + cmp['d'] = cmp['D'] = 'H'; + cmp['u'] = cmp['U'] = 'A'; + } + + static class ReversibleByteArray extends java.io.ByteArrayOutputStream { + void reverse() throws Exception { + if (count > 0) { + int begin = 0, end = count - 1; + while (buf[begin++] != '\n'); + while (begin <= end) { + if (buf[begin] == '\n') begin++; + if (buf[end] == '\n') end--; + if (begin <= end) { + byte tmp = buf[begin]; + buf[begin++] = cmp[buf[end]]; + buf[end--] = cmp[tmp]; + } + } + } + } + } + + public void old_main() throws Exception { + byte[] line = new byte[82]; + int read; + buf.reset(); + stream.reset(); + + while ((read = stream.read(line)) != -1) { + int i = 0, last = 0; + while (i < read) { + if (line[i] == '>') { + buf.write(line, last, i - last); + buf.reverse(); + buf.reset(); + last = i; + } + i++; + } + buf.write(line, last, read - last); + } + buf.reverse(); + stream.reset(); + } + // CHECKSTYLE.ON: .* + @Benchmark + public void jmhTimeRevComp() throws Exception { + old_main(); + } + + private static final String fastaStr = ">ONE Homo sapiens alu\n" + + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n" + + "TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n" + + "AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n" + + "GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n" + + "CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n" + + "GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n" + + "GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n" + + "TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n" + + "AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n" + + "GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n" + + "AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n" + + "AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n" + + "GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n" + + "CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n" + + "AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n" + + "TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n" + + "TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n" + + "GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n" + + "TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n" + + "CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n" + + "CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n" + + "TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n" + + "CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n" + + "AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n" + + "GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n" + + "TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n" + + "TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n" + + "GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n" + + "GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n" + + "ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n" + + "TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n" + + "CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n" + + "CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n" + + "GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n" + + "CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n" + + "GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n" + + "GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n" + + "GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n" + + "GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n" + + "GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n" + + "AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n" + + "CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n" + + "GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n" + + "AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n" + + "GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n" + + "ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n" + + "GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC\n" + + "GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC\n" + + "GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\n" + + "TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA\n" + + "AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG\n" + + "GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT\n" + + "CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC\n" + + "TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG\n" + + "ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC\n" + + "GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA\n" + + "ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA\n" + + "CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA\n" + + "CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA\n" + + "ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG\n" + + "CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG\n" + + "AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC\n" + + "CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG\n" + + "AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC\n" + + "CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG\n" + + "CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG\n" + + "CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG\n" + + "CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC\n" + + "ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA\n" + + "AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC\n" + + "TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC\n" + + "ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG\n" + + "CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG\n" + + "AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT\n" + + "AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA\n" + + "TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC\n" + + "CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA\n" + + "TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG\n" + + "CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT\n" + + "GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG\n" + + "GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG\n" + + "CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG\n" + + "GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG\n" + + "GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT\n" + + "AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT\n" + + "GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT\n" + + "CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG\n" + + "GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC\n" + + "TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT\n" + + "CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG\n" + + "ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG\n" + + "CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG\n" + + "AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA\n" + + "CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG\n" + + "CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC\n" + + "ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC\n" + + "GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC\n" + + "GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG\n" + + "GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT\n" + + "TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG\n" + + "CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA\n" + + "GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG\n" + + "CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC\n" + + "GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG\n" + + "CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA\n" + + "CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG\n" + + "CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA\n" + + "ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC\n" + + "CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT\n" + + "GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA\n" + + "AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG\n" + + "ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC\n" + + "TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA\n" + + "GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC\n" + + "GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG\n" + + "TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC\n" + + "AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA\n" + + "ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA\n" + + "GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\n" + + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG\n" + + "TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC\n" + + "CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT\n" + + "GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC\n" + + "CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA\n" + + "GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT\n" + + "TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC\n" + + "ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC\n" + + "TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG\n" + + "GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG\n" + + "TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG\n" + + "GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC\n" + + "GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT\n" + + "ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC\n" + + "GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC\n" + + "GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC\n" + + "CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA\n" + + "ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG\n" + + "AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC\n" + + "TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT\n" + + "CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG\n" + + "TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG\n" + + "CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC\n" + + "GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT\n" + + "GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC\n" + + "CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC\n" + + "TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG\n" + + "CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\n" + + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG\n" + + "AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG\n" + + "AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT\n" + + "GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA\n" + + "TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC\n" + + "AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA\n" + + "AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG\n" + + "CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC\n" + + "TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG\n" + + "GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT\n" + + "CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG\n" + + "CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG\n" + + "GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA\n" + + "AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA\n" + + "GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC\n" + + "TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC\n" + + "CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA\n" + + "GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\n" + + "CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG\n" + + "AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG\n" + + "ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC\n" + + "ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC\n" + + "AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC\n" + + "GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG\n" + + "GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT\n" + + "CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC\n" + + "GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC\n" + + "CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\n" + + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA\n" + + "GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG\n" + + "GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT\n" + + "CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA\n" + + "AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG\n" + + "CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC\n" + + "CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG\n" + + "GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG\n" + + "GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT\n" + + "TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA\n" + + "ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG\n" + + "CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA\n" + + "ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA\n" + + "GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG\n" + + "TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC\n" + + "GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA\n" + + "GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT\n" + + "GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT\n" + + "GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG\n" + + "TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT\n" + + "TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC\n" + + "TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC\n" + + "GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT\n" + + "CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC\n" + + "TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA\n" + + ">TWO IUB ambiguity codes\n" + + "cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg\n" + + "tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa\n" + + "NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt\n" + + "cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga\n" + + "gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa\n" + + "HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca\n" + + "tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt\n" + + "tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt\n" + + "acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct\n" + + "tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt\n" + + "gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa\n" + + "accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt\n" + + "RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt\n" + + "tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag\n" + + "cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg\n" + + "ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat\n" + + "actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg\n" + + "YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa\n" + + "KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata\n" + + "aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa\n" + + "aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg\n" + + "gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc\n" + + "tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK\n" + + "tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt\n" + + "ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg\n" + + "ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa\n" + + "BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt\n" + + "aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc\n" + + "tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc\n" + + "cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac\n" + + "aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga\n" + + "tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga\n" + + "aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD\n" + + "gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg\n" + + "ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV\n" + + "taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa\n" + + "ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat\n" + + "gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg\n" + + "gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa\n" + + "tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt\n" + + "tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt\n" + + "taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca\n" + + "cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag\n" + + "aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt\n" + + "cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt\n" + + "ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW\n" + + "attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag\n" + + "ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa\n" + + "attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc\n" + + "tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta\n" + + "aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata\n" + + "cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc\n" + + "gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg\n" + + "attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca\n" + + "BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga\n" + + "DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat\n" + + "tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM\n" + + "tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR\n" + + "tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg\n" + + "taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc\n" + + "aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc\n" + + "DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa\n" + + "VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt\n" + + "agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat\n" + + "gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt\n" + + "tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt\n" + + "catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt\n" + + "tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR\n" + + "aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat\n" + + "aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac\n" + + "acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS\n" + + "tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga\n" + + "aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM\n" + + "acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt\n" + + "RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt\n" + + "RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta\n" + + "tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac\n" + + "gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt\n" + + "YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc\n" + + "ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt\n" + + "ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat\n" + + "gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta\n" + + "KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD\n" + + "aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg\n" + + "gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH\n" + + "taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact\n" + + "VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV\n" + + "NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa\n" + + "MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag\n" + + "cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata\n" + + "ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg\n" + + "tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN\n" + + "aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc\n" + + "actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg\n" + + "tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga\n" + + "gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa\n" + + "BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca\n" + + "aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata\n" + + "aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat\n" + + "YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt\n" + + "aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW\n" + + "cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata\n" + + "tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata\n" + + "tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt\n" + + "MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac\n" + + "taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta\n" + + "tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS\n" + + "RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc\n" + + "agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata\n" + + "NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa\n" + + "gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata\n" + + "aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt\n" + + "ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW\n" + + "cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt\n" + + "tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa\n" + + "RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt\n" + + "tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD\n" + + "gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc\n" + + "tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta\n" + + "ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM\n" + + "tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc\n" + + "ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc\n" + + "BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt\n" + + "gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga\n" + + "acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag\n" + + "gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc\n" + + "taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat\n" + + "acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta\n" + + "tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt\n" + + "catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa\n" + + "tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB\n" + + "atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR\n" + + "ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta\n" + + "ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta\n" + + "cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK\n" + + "SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW\n" + + "VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc\n" + + "BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct\n" + + "NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt\n" + + "tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa\n" + + "ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa\n" + + "cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa\n" + + "VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR\n" + + "atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac\n" + + "aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc\n" + + "tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac\n" + + "RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag\n" + + "gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc\n" + + "tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact\n" + + "attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc\n" + + "atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga\n" + + "cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt\n" + + "NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR\n" + + "ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat\n" + + "cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg\n" + + "aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac\n" + + "agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR\n" + + "tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga\n" + + "ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg\n" + + "ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa\n" + + "tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag\n" + + "taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg\n" + + "tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN\n" + + "YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt\n" + + "ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa\n" + + "tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat\n" + + "ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg\n" + + "attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt\n" + + "atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW\n" + + "YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta\n" + + "gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV\n" + + "MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta\n" + + "tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt\n" + + "ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa\n" + + "aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa\n" + + "BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM\n" + + "tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK\n" + + "StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV\n" + + "cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN\n" + + "atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg\n" + + "atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg\n" + + "ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct\n" + + "gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM\n" + + "tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD\n" + + "BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc\n" + + "agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga\n" + + "HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR\n" + + "tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt\n" + + "aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa\n" + + "catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB\n" + + "aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat\n" + + "tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt\n" + + "cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag\n" + + "DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat\n" + + "gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta\n" + + "tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM\n" + + "atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc\n" + + "KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt\n" + + "tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata\n" + + "tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK\n" + + "taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt\n" + + "NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa\n" + + "HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa\n" + + "ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg\n" + + "tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK\n" + + "cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga\n" + + "ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca\n" + + "HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg\n" + + "gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS\n" + + "BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg\n" + + "gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat\n" + + "KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact\n" + + "cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat\n" + + "tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD\n" + + "taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM\n" + + "gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt\n" + + "aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat\n" + + "acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta\n" + + "RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc\n" + + "attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac\n" + + "KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS\n" + + "KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD\n" + + "gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB\n" + + "aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct\n" + + "aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga\n" + + "ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY\n" + + "tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga\n" + + "aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta\n" + + "tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY\n" + + "MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc\n" + + "cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta\n" + + "caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt\n" + + "ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc\n" + + "acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat\n" + + "tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc\n" + + "gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa\n" + + "atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga\n" + + "aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat\n" + + "NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt\n" + + "taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa\n" + + "aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat\n" + + "ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca\n" + + "DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata\n" + + "tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat\n" + + "aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa\n" + + "ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM\n" + + "ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca\n" + + "RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa\n" + + "aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac\n" + + "aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt\n" + + "aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK\n" + + "tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat\n" + + "atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR\n" + + "BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc\n" + + "gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct\n" + + "cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN\n" + + "RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat\n" + + "taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt\n" + + "aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt\n" + + "gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct\n" + + "gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa\n" + + "aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta\n" + + "gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg\n" + + "ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat\n" + + "MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct\n" + + "SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY\n" + + "aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt\n" + + "VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat\n" + + "HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc\n" + + "agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt\n" + + "gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg\n" + + "agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg\n" + + "tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag\n" + + "gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga\n" + + "VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg\n" + + "tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV\n" + + "MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt\n" + + "actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa\n" + + "WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa\n" + + "tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD\n" + + "KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct\n" + + "BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac\n" + + "attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB\n" + + "VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD\n" + + "aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca\n" + + "tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat\n" + + "tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK\n" + + "tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt\n" + + "VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta\n" + + "tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat\n" + + "ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa\n" + + "tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg\n" + + "WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta\n" + + "tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc\n" + + "tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct\n" + + "MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat\n" + + "tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac\n" + + "atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg\n" + + "aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt\n" + + "aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa\n" + + ">THREE Homo sapiens frequency\n" + + "aagtccgatgagtttcaatcatgactgcgaggagatccatgcggtgtacctaaacctaca\n" + + "tcgtatgtatttgctgacgttcattcttgatacataaagatccgatatcggtccactttg\n" + + "tttaccaaaagccctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatg\n" + + "gggatattgccggtgagtacaagttagaccacacattagaactgacctatattcgtcatc\n" + + "atagagatggagtatgaattgattctgcgaagtacactggctttacgagtatctagacgc\n" + + "cgcggtatatctcccgtcaatactatgaaggtatatatatagaggctgaaaattcatgtt\n" + + "caatcctctttctaagagtgagtgggagccccttctgttgtcggagtaaaaaggcattat\n" + + "tcctcaaattgtcagaagcaaagtatacgtgatgtttgcttagaacaaaagagttacctt\n" + + "agggtaggtaaatctcgattcaccgagagaagtgattttggcggtgtgcgattaattctt\n" + + "ttgatgacagatctcattattttatatagctccctctttgtatttagagtttgcgtaggt\n" + + "aacctggcaaaaccatatcccggggggagagtgcgctgaacattttatacgatgtgatta\n" + + "ctcaaaggataaggttcgaggcctctatactcatggaactatcttataattataatggat\n" + + "cgtggctcattccacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaac\n" + + "gtacatcttctaaggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaa\n" + + "atatttttaaaaattgattctactgcgaggaactaaggtgtagacaagcccttagtaacc\n" + + "ggtggatgtcgcttcagttttatagcaaacattattcaatttcagtcttgactgaaatta\n" + + "gtttgttagtgttagaggtccatatgtcacatgcatatggtctagatgccattgtacagt\n" + + "aataccttagattagtattagcggcatgcgtacttggatttcacttgtaagaatgagctt\n" + + "aggacggtcgcctgtagggctgcaaataggaatacttacaatttttgatgacttgttagc\n" + + "atatcgctatcacccataaaaaacctgatacttgatgagcgggtgattgagactatgtac\n" + + "tgatataattcaatagctccaatagatgaaacagctatgcgcctatttatgtcaaataat\n" + + "cgatgtgatacaagcttagagctgaacgagcgcgagtggaattagcggtgatctctatcc\n" + + "taaaaagccacgaaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagt\n" + + "taaatttgcatctcatgccccacgaagaatgggtagagagtttgaaggtgcttctggatt\n" + + "ttcctaagtacgtggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaacc\n" + + "acaaacccctgggtgaatctgattagccaacccagtgatctgatttcagttgtcaaatct\n" + + "cttttttataactaccttttgtttccataatttaaccggatctcataatgaacaaacggg\n" + + "tagaataatggtagcacatagcgagcttgtctattcagaaatatggcctactcagaatgt\n" + + "attctccaaatcagtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttat\n" + + "cggttccttgtactacaatactcttgcccaacaaatactaagcataacagcaaaattcga\n" + + "atccccctccttttaataaatggtttttcaatatagccgattcgtattcgttagtctttc\n" + + "accaactattaacctggcatctaattaataaaatcaccaaaggactctataatatgacag\n" + + "tcacttcggcctcttttaagacagttgattattgcaggtccgcaattgatggtgacatgc\n" + + "acaattagttagaatccgactatggagacaattaacaattgtagtgcccatttggtccag\n" + + "ttgacttcaaccacgagttataaaggtattttaatttatagtcgatagtaccaacaacaa\n" + + "gcacaatcataattatgttagaaaacccagggggtaatgctctaaatccagctttaaggc\n" + + "cagagtgcactatgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctagg\n" + + "aggtgccgagtgagaatatcagataccttatgaagcaacgattatatctggactagatca\n" + + "tgatgatcggaataaaacattgaaataagtccttatcaaggagcataaacattttattta\n" + + "atttatacttcgtaaataaattcagaattttttttcaagacattaatctgagtaaatgac\n" + + "ggctagaaagggttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgc\n" + + "gtttttactgaaacaaaggttcaccggaaagaaggctgccacttttagcttcttgacgat\n" + + "ctttagcgtcatatttttagattagtcgaaaaacggaaaacaaacttaacgaagctggtt\n" + + "gcacggggtaccgagaaaccaaagagcaggacaactccttgatcgggaagaactgaaata\n" + + "gacagctgtcattttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgc\n" + + "atgaaaatactgaggatgtaaactatagccagtcaggcccgcgtgttgactaattgatga\n" + + "agcaaacaaaatagccggtattcgttaaaaggaacgggttgccagctacagatatactct\n" + + "aggtatatcccaaacaagagacgtcctttggctgttgtaatcggtcataatacttgtcac\n" + + "ataaacaagatcgctgaattaaacattaaacagttagtgatacacaatcgtggttggggc\n" + + "tgggatgtgcaataaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaa\n" + + "cattattatttcttgacaatggaatcgataagcgttcctctaacttggtatatatatctc\n" + + "gaccccgggattccagccattcttgtatgaagatttaaccatttaactatgcatagttga\n" + + "atggtaaggaaaatgatattgactgcaacagattttggatgcaaaaatatttgtgaatta\n" + + "ttggttatatactggttgtatagcacaatcattaggtcctagaaggcatactcaacctca\n" + + "gcgagagagctagcatgcataattgtaccgcccatattaatattcctgaaatgatttctt\n" + + "acattacgcccaatttcagtcatcgaacacccccatcaatttacccgatagagaacgtga\n" + + "tcatacgcaataccctatgcgaacgtccactctatagcgtctgtatacaatgattattcg\n" + + "ttccatttacaacgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctc\n" + + "ctggaatgtatgagttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgt\n" + + "acgaatgaaaggccacttttagaagagacctttgtatccattgtggagaatatcataaat\n" + + "tcaagatggggtgtcatgctattcggtcctaaacattcttaatggctgttctattgttag\n" + + "tctgatttaaaatggaaccatagcacgaatagttagatagggctcatacccctgtaacga\n" + + "tctacaaatccttccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatca\n" + + "aagaacactcacacgtcagattattacactgatacgaattatttcagtcgacagtaattg\n" + + "aatagaaacttattaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttg\n" + + "actgtaaaaaaatggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagt\n" + + "tttttctctgttattaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaa\n" + + "gatcacacatcacacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtag\n" + + "tgggatcaacatatggacgaatttatgctcaatgagccaacctcccccgcattgcggttc\n" + + "attttaaggcctgggtaacatctatcgtttagataatcaaaggaatccgactatgcaatt\n" + + "gtctgacttcatccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaatacc\n" + + "atattgaaatcgtaatacgataattgttgctattgactacaggttatgaaaaaacttact\n" + + "ttgcgggtacatgcatatttttgtaccacattattacgcgatatctctcagtgtactcta\n" + + "aattaaaccctcttcgaacattttagttcctattcgtaaacacgtgctacgcggcaattt\n" + + "gccggtcgtagaatggacaactccagttcaactgcatgtaactcatagctcgcgttagta\n" + + "taaattgactagtagccatgggacaaagtaactagtcagcggaaaagatccctttaaaga\n" + + "tatatgcaggttgcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagc\n" + + "gtctctatcgtatcttctaattttgggccgtgagaatcgaaactactctgatttgctgca\n" + + "cacgttaggtaatatcgcccattttcccgtataagctccgtacttatacgaactacacga\n" + + "ccttttaagcattagccgctcatatcgtgattcgtgtacagatgagtctattaaaattac\n" + + "agacatactccatatctcgctccttgaactttgaataatgcgctaacttgtactatgaat\n" + + "aggcagaacccaactttcccgtttgcgtcaagcggggaaacgatacatgttgtcagattt\n" + + "atgattatctagttttagatcacgtttaccgataatcggctgtggtctgagcagtcctac\n" + + "actgagtatttacttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaa\n" + + "tacggagtacgatgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaa\n" + + "ccatttttacgatttttactatagcggtcatgaagtgcgaaactgcttgcaaattttcta\n" + + "cacacattgtggctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccag\n" + + "ggaaagcgcgaattatttggtgactaatagtccgtgggtttgagccatatacctaacgcc\n" + + "ataaactacgtggtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcag\n" + + "cacagactaactttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaag\n" + + "tcgcttgcgcggcacggattcgattgggcggctcaatcttgcctaatttctactattgtc\n" + + "agctgtacgactgtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttat\n" + + "gaccaaaggtcttataattgaagcgcacttccgttcatcaaattaaatcctggcttaccc\n" + + "gattctccggaagtctgacctagagattgacgacggccgcgtattattgagacctcttca\n" + + "ggattaatcaataacgaagtagttgatctgtttggcgacgtaccttaagccgactccgct\n" + + "acacgagtttctactaaaccaatgtagccttatgcttagatgaataccgtcctaattaga\n" + + "tattccggcataacagcagtaaattatctgttcaatggacgaacattgaattgttagtat\n" + + "tctacacaagtcaggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatg\n" + + "cttgagcttgcgttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacac\n" + + "cagcatattctatatgctagacgtcttccttaaaggatcgtagtattataattaataata\n" + + "agaaatatggttgacgtctagtcagcgggcatacgctgctctatatactggcattattca\n" + + "aaacttgacggtaaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgg\n" + + "gaaccaaaatgtcacagaaaacacctctttattgccaagcatgcaataaaaaaaatgtta\n" + + "atagtacgtttacgacattttattttataataaagagaaactattacacctattgatatg\n" + + "ataggacgtaaattaacgagtagcctgcatagaggcaaatgaggtttctacatggtatag\n" + + "acctgatgctgaaacatcgatgagttttggtcccctcgctcgttgaaatctagtcattta\n" + + "ctactgtctttcgagctattataccacttcactatgtggtgtttctttgctatgtatggg\n" + + "gctagtcaaacatgatgactatagctacaactcagagagcgggcgtgttaagagtatctc\n" + + "atgctagaactgcacgacgaacttgatacaaagtaacaacatttacgattccacaaggtg\n" + + "actttgaagaaacatagtttaattctctgcttcgatcatttctataaaccggtaccatcg\n" + + "cagcggatagatgcataacatttctactactccaggcatcttaaaacacacgtagtactt\n" + + "cactagattaagacacgataagtgtataacttggcagtgggaagcaaggagattggcgaa\n" + + "ctcctggcatctgttacgttttgttcaggctcggttgttgataatgtccgactcctgcca\n" + + "tattgaagactcgctcgagggagatcgggattcgttgattataagtacacgtgttccgta\n" + + "atactatgaggcagtgattcaaaatggcacttctgacttacatgactaggtattattacc\n" + + "acggaagcgttaaaggcacactcttatggacttaagattgcaagtgccttcttctagcct\n" + + "gaattcgcgggttcaacacaaactctctttagacatccgttgcctaaaggctgagacgta\n" + + "ggggcaaccctttaactatgtactaaaaaactagttggtaatttaacaacgtgtccaatc\n" + + "aagacgatgcaccaacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtga\n" + + "taaaccccaccttgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataa\n" + + "cctaaatccggatgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagca\n" + + "tacatttaggtctcctgcattgcattcaattgaatcgtttgtattatgagctgtacagta\n" + + "gctatatcagctatagttatcccagaggaacaggtaaactagctctgagcgtgaaatccg\n" + + "gatattagaacccctagatgggattgattctagctaatacaggcttatctggttttacag\n" + + "ttatctagatgattggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtat\n" + + "tgcccgggaagctattttctaggtattataaagtcgagcattaatatcaatttgacagta\n" + + "aaggtctttcaccagcttcatatgccatagggcccatactcgatttaaattgaacggttt\n" + + "aacgagtattggaactctcacttataactgagtagctatacgaaaaatctggtccatttc\n" + + "cagaaatttattatcgatttgctgcttagtacccaggaagtgataacccttgaaggcaca\n" + + "acactgtaataagttttcctgtcacatctgtaatattcggtcactacgcattcacgacta\n" + + "aagataattactatactaattaaaagttcaatgttagggccgaatcatagtagaaattct\n" + + "cgtctagcctaatcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaa\n" + + "tgctagagataggtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagtt\n" + + "cgcttctttagtccgggcgtttgggatgacaactactatacgtagagccgtactcaggat\n" + + "tagatagtgtgaaagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtt\n" + + "taggccaaacattaaccgttgtagggatattctaatacaggccttcaccgaaccctaatg\n" + + "ataatctgtcttaataacattaaatgattgtctccgctacgagctcttagggcctcattt\n" + + "taaatgactaatgtccaaagaagagactttcccaatttcaatctgtcacgtatagacggc\n" + + "accttagtgagtcatatcattaagatagaagattatcaggagggaagtttctattatcaa\n" + + "ccgttacgcaaccataaacttttaaatctcataatggcattgagatcaagagctttcatg\n" + + "atggtaaagttcgtatgtgatgctggggagctagatatcggtataccacttcggttgtgg\n" + + "taagcccgagtgggccgttagtaatattaatagacgattatccgacaatgcattcgctga\n" + + "aataatcttacttaggagaaattaatgctatgagccaaaactatttatgtctgtcacatt\n" + + "attgactaaagtatctatcgacaaaactgatgtccataagttgtagcagatagtcggtgt\n" + + "atggtgtcaccaatgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaa\n" + + "attgcctattatacagataggcttgtttagtcagataaggttccgcttgaggtgctctaa\n" + + "cttagcgagagttagaaagcctagtgagaggcattttggtgccaaactccggctcgcatg\n" + + "agtaggccagagagtcactttctttcgtcgaagaagttggtgaacagccttttgattagt\n" + + "tgtttgtcttgtggctatgtgctactatataagttagaacgcaaactaatctaatcagca\n" + + "aagtaaaataggaccttgaacgagacggggtacgccgttgaggctcgagatagtagataa\n" + + "actagaggaatgtagataaaacattagctagggggtttagttactggattacataggaag\n" + + "tgcaccatcacggtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggactta\n" + + "acaagttcgtgcataatgaaatcctatacggactttgcatatctctaccgactcatctgg\n" + + "tcgtctatgcgggtaattgtattgctccaagtggatgactattttggcgtcccagcacat\n" + + "agtaaatgtaaatccttataatagcataagcaattattagactgcgtgaagtcttagtag\n" + + "ttctcaagctttacgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccat\n" + + "tgaggtcattgaatgtacggagcactattatcaatgcggtatgcgattttctgagcgatt\n" + + "attgttaaagacttagcgttgagccccggaacacttgattacagattctttaaggagtta\n" + + "tccaaatatcattttaaataatagtagtatcgtgctttggacaataaaaaaagacccgtt\n" + + "ctcttatgttgttttgcgacgtacttctctgatatatacttcaactatgaagattctatt\n" + + "catcgataacccaggtatatttatatgcccgttcactgcgcagggcaaattatctacgga\n" + + "caataatgacgtagttggacccggtaagaactaacgcttaatatgattaaggatgtatgc\n" + + "cagtattatcttattatgtcagagtagaagtttctctgagattttccgtcgttgtggtac\n" + + "accggatttggctctctttttagaactgagaactcggagtgtgtagtcttgtttccttca\n" + + "atttatcaatatgcttttataccgccctcatcaactataacaggacgacaagttccgtct\n" + + "tgctccatcatatactaccgatacaccaatcgtatcaagtttagtatacttgctttctct\n" + + "cttctacagcttactcgcttgtccgagaagcggttggtgctcataaagttagtagtaaat\n" + + "gtacaactagtagccagtccttacctgtttttacgactactacggacaccatgagataca\n" + + "gaagttagtgctacaattataccattacatgctcaatatcgttgtcggccataagatcga\n" + + "agagtgcatcacgcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacaca\n" + + "ctccccttgttgactaacatcttttacaagaggctaaatcattgtccaggatcgaatacc\n" + + "ttgtgtacaatcgtcacccatcggaagaataccacttttccgatgtagtatgatttacaa\n" + + "aaaacatctatgtgagtaggccaattgtagtagaatatattcatttgaccgtcattagcc\n" + + "ttcttcttaggttgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcga\n" + + "tttcatacagctgccaacaccttttttaccaggctagagtcagaaaagttggagccatgt\n" + + "taaatagttaccatcataaaccactgttgtctactagtctgatcagctttcatgcctgtg\n" + + "caagcaatatggattctcacgtaatggtaacaactgttgcgttacttaggctggttaatt\n" + + "tgtcagagtaataaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcc\n" + + "taggaataggaaaagtaaagctcttttattctgatagtgactaactcaggatctaaatac\n" + + "gcgattatactaaccttcaccaaagctcaaaaatcatctgctggtgaccagttatagaca\n" + + "gggtaattcaatatttaatgtctcccttaacatttcaccagcatggattgaagatagtat\n" + + "aaagttttacatggcagtcattgtgtcacggttctatacaaattctgatagttagacggt\n" + + "atttgaaatgtgcttctagcatggtatcttacacaactgaatgaacgactggagccgttc\n" + + "gtatactatttgcgagcctcgagaccccgtttcctaatgttaacgaatatagtataatat\n" + + "aaattgtgatatgaataacacaagtaactacagtttggacaattaattgttctaaactaa\n" + + "aaatcattcacttcagatggcatagagttatggctactacacatataaagcggtatgtga\n" + + "aacacccgttttagccggaaaccctctactgctcgggacaatgaatgatttccaaaatat\n" + + "ggatgtgcagaattgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtc\n" + + "gttgcaaagtttaaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaa\n" + + "acgtgacagaaagtctagaagaactgtgaataatgtctattactgattaactagtaagac\n" + + "attagtgcatctggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtc\n" + + "gtggctgttccggtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaag\n" + + "gtcaatttcacaatatccgatcacattgtgctaggttcgtcctttaccttgcttagtgct\n" + + "gcatgtacggggtgtcatgacttgttatcggcagactctttatcccaagaatggataata\n" + + "tgtacatggaaagtgtccataattaagtcccttcactgtaaagaatgactgccacgtgat\n" + + "ccatgaggtctacagaaaccgacttacttgctttttgatcaacttaattatggattcata\n" + + "aagttcagatatcggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatc\n" + + "tgaatgacagtgatagaaaagatccccatttgcccggtcagttcatgttacaccactcat\n" + + "tagtactgtaagtgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaa\n" + + "ctggatgtacgacgatcgagacgaagaggtatatataacctaaatactaggtacgttgtt\n" + + "agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct\n" + + "cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt\n" + + "tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat\n" + + "tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc\n" + + "gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc\n" + + "tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg\n" + + "tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat\n" + + "atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag\n" + + "cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa\n" + + "ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt\n" + + "ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat\n" + + "atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc\n" + + "gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact\n" + + "tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag\n" + + "gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg\n" + + "atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag\n" + + "tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac\n" + + "ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag\n" + + "tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta\n" + + "aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt\n" + + "gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa\n" + + "ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc\n" + + "agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt\n" + + "agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat\n" + + "acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc\n" + + "cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct\n" + + "cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct\n" + + "cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa\n" + + "aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt\n" + + "tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt\n" + + "atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct\n" + + "cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga\n" + + "tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat\n" + + "catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc\n" + + "tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg\n" + + "caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc\n" + + "tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc\n" + + "aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag\n" + + "aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat\n" + + "ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac\n" + + "gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag\n" + + "ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt\n" + + "cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta\n" + + "gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca\n" + + "ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt\n" + + "cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg\n" + + "taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg\n" + + "gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc\n" + + "taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt\n" + + "ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt\n" + + "aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt\n" + + "gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta\n" + + "acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct\n" + + "ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta\n" + + "tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt\n" + + "tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg\n" + + "tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa\n" + + "ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac\n" + + "aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga\n" + + "tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca\n" + + "gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt\n" + + "gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc\n" + + "cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg\n" + + "actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa\n" + + "tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg\n" + + "ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt\n" + + "ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta\n" + + "agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc\n" + + "gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa\n" + + "tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt\n" + + "atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca\n" + + "cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa\n" + + "tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca\n" + + "gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg\n" + + "gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat\n" + + "aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg\n" + + "gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat\n" + + "cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa\n" + + "taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg\n" + + "tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt\n" + + "ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac\n" + + "aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc\n" + + "gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag\n" + + "aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc\n" + + "tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa\n" + + "tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata\n" + + "aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta\n" + + "ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc\n" + + "ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc\n" + + "caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct\n" + + "gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg\n" + + "cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc\n" + + "ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta\n" + + "tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg\n" + + "atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc\n" + + "ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc\n" + + "acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc\n" + + "taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga\n" + + "ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga\n" + + "aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat\n" + + "cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc\n" + + "tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact\n" + + "gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa\n" + + "aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag\n" + + "cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc\n" + + "cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa\n" + + "gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg\n" + + "cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg\n" + + "gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca\n" + + "agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac\n" + + "aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt\n" + + "aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg\n" + + "cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt\n" + + "agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg\n" + + "cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa\n" + + "agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga\n" + + "gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta\n" + + "aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata\n" + + "agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc\n" + + "cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc\n" + + "agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca\n" + + "ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga\n" + + "tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag\n" + + "gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat\n" + + "gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt\n" + + "ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg\n" + + "gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc\n" + + "atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc\n" + + "tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata\n" + + "ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg\n" + + "tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag\n" + + "cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg\n" + + "ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat\n" + + "aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg\n" + + "gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat\n" + + "ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag\n" + + "atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac\n" + + "aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct\n" + + "gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga\n" + + "atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt\n" + + "aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt\n" + + "tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg\n" + + "ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta\n" + + "gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac\n" + + "cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct\n" + + "ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga\n" + + "ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg\n" + + "ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat\n" + + "cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga\n" + + "tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt\n" + + "tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc\n" + + "cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt\n" + + "gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct\n" + + "ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt\n" + + "ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa\n" + + "tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc\n" + + "agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta\n" + + "ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc\n" + + "cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct\n" + + "agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc\n" + + "tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc\n" + + "gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga\n" + + "ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa\n" + + "ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca\n" + + "agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata\n" + + "attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact\n" + + "ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat\n" + + "agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat\n" + + "aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata\n" + + "gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta\n" + + "gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg\n" + + "ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac\n" + + "gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata\n" + + "ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat\n" + + "taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta\n" + + "aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata\n" + + "tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata\n" + + "ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga\n" + + "agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt\n" + + "ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt\n" + + "agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg\n" + + "gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa\n" + + "tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg\n" + + "gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct\n" + + "cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc\n" + + "ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta\n" + + "cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt\n" + + "gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc\n" + + "gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc\n" + + "tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt\n" + + "cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca\n" + + "aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac\n" + + "ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac\n" + + "gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag\n" + + "aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga\n" + + "gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct\n" + + "aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta\n" + + "gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat\n" + + "agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat\n" + + "caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta\n" + + "gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta\n" + + "aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt\n" + + "tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt\n" + + "tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc\n" + + "ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg\n" + + "ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg\n" + + "gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa\n" + + "ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa\n" + + "aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa\n" + + "tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat\n" + + "acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac\n" + + "atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga\n" + + "gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac\n" + + "tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc\n" + + "cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa\n" + + "gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg\n" + + "acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga\n" + + "acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga\n" + + "attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg\n" + + "tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt\n" + + "cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag\n" + + "aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac\n" + + "ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac\n" + + "tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat\n" + + "gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga\n" + + "gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc\n" + + "acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta\n" + + "gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac\n" + + "gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc\n" + + "ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt\n" + + "taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg\n" + + "agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa\n" + + "gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag\n" + + "ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc\n" + + "accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag\n" + + "tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact\n" + + "taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga\n" + + "catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat\n" + + "tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga\n" + + "ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg\n" + + "aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa\n" + + "atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa\n" + + "tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt\n" + + "ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact\n" + + "tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt\n" + + "aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat\n" + + "agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc\n" + + "acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc\n" + + "aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct\n" + + "ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat\n" + + "gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat\n" + + "taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata\n" + + "taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga\n" + + "tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat\n" + + "gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg\n" + + "ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa\n" + + "atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat\n" + + "tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat\n" + + "cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt\n" + + "aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac\n" + + "taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag\n" + + "caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata\n" + + "ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct\n" + + "tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac\n" + + "tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg\n" + + "gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta\n" + + "gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat\n" + + "gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg\n" + + "ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa\n" + + "tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa\n" + + "taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac\n" + + "gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt\n" + + "ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga\n" + + "gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca\n" + + "tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc\n" + + "ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt\n" + + "tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc\n" + + "cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat\n" + + "ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg\n" + + "caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg\n" + + "cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat\n" + + "gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat\n" + + "cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg\n" + + "taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat\n" + + "tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata\n" + + "taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc\n" + + "tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac\n" + + "tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt\n" + + "tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt\n" + + "ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt\n" + + "aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg\n" + + "atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga\n" + + "actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta\n" + + "gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga\n" + + "ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga\n" + + "gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct\n" + + "tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc\n" + + "aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta\n" + + "atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt\n" + + "catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc"; +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/spectralnorm.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/spectralnorm.java new file mode 100644 index 0000000..dc6d3c6 --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/spectralnorm.java @@ -0,0 +1,112 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and slightly + * modified to fit the benchmarking framework. + * + * The original file is `spectralnorm/spectralnorm.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * + * contributed by Java novice Jarkko Miettinen + * modified ~3 lines of the original C#-version + * by Isaac Gouy + */ + + /* + * Description: Eigenvalue using the power method. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class spectralnorm +{ + + private static final NumberFormat formatter = new DecimalFormat("#.000000000"); + + private final double Approximate(int n) { + // create unit vector + double[] u = new double[n]; + for (int i=0; i<n; i++) u[i] = 1; + + // 20 steps of the power method + double[] v = new double[n]; + for (int i=0; i<n; i++) v[i] = 0; + + for (int i=0; i<10; i++) { + MultiplyAtAv(n,u,v); + MultiplyAtAv(n,v,u); + } + + // B=AtA A multiplied by A transposed + // v.Bv /(v.v) eigenvalue of v + double vBv = 0, vv = 0; + for (int i=0; i<n; i++) { + vBv += u[i]*v[i]; + vv += v[i]*v[i]; + } + + return Math.sqrt(vBv/vv); + } + + + /* return element i,j of infinite matrix A */ + private final double A(int i, int j){ + return 1.0/((i+j)*(i+j+1)/2 +i+1); + } + + /* multiply vector v by matrix A */ + private final void MultiplyAv(int n, double[] v, double[] Av){ + for (int i=0; i<n; i++){ + Av[i] = 0; + for (int j=0; j<n; j++) Av[i] += A(i,j)*v[j]; + } + } + + /* multiply vector v by matrix A transposed */ + private final void MultiplyAtv(int n, double[] v, double[] Atv){ + for (int i=0;i<n;i++){ + Atv[i] = 0; + for (int j=0; j<n; j++) Atv[i] += A(j,i)*v[j]; + } + } + + /* multiply vector v by matrix A and then by matrix A transposed */ + private final void MultiplyAtAv(int n, double[] v, double[] AtAv){ + double[] u = new double[n]; + MultiplyAv(n,v,u); + MultiplyAtv(n,u,AtAv); + } + // CHECKSTYLE.ON: .* + + private static final int APPROXIMATE_N = 100; + + public boolean verifySpectralNorm() { + double expected = 1.2742199912349306; + double found = Approximate(APPROXIMATE_N); + + if (Math.abs(expected - found) > 0.000000001) { + System.out.println("ERROR: Expected " + expected + " but found " + found); + return false; + } + return true; + } + @Benchmark + public void jmhTimeSpectralNorm() { + Approximate(APPROXIMATE_N); + } +} diff --git a/src/main/java/org/linaro/benchmarks/benchmarksgame/threadring.java b/src/main/java/org/linaro/benchmarks/benchmarksgame/threadring.java new file mode 100644 index 0000000..c30713a --- /dev/null +++ b/src/main/java/org/linaro/benchmarks/benchmarksgame/threadring.java @@ -0,0 +1,120 @@ +/* + * This benchmark has been ported from "The Computer Language Benchmarks Game" suite and + * significantly modified to fit the benchmarking framework. + * + * Originally the benchmark finished with 'System.exit(0)'. A new state of message "-1" was + * introduced to avoid this. + * + * The original file is `threadring/threadring.java-3.java` from the archive + * available at + * http://benchmarksgame.alioth.debian.org/download/benchmarksgame-sourcecode.zip. + * See LICENSE file in the same folder (BSD 3-clause) + * + * The Computer Language Benchmarks Game + * http://benchmarksgame.alioth.debian.org/ + * contributed by Klaus Friedel + */ + +/* + * Description: Switch from thread to thread passing one token. + * Main Focus: TODO + * + */ + +package org.linaro.benchmarks.benchmarksgame; + +import java.util.concurrent.locks.LockSupport; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) + +// CHECKSTYLE.OFF: .* +public class threadring { +// CHECKSTYLE.ON: .* + static final int THREAD_COUNT = 503; + + private static String lastActedThreadName; + + public static class MessageThread extends Thread { + MessageThread nextThread; + volatile Integer message; + + public MessageThread(MessageThread nextThread, int name) { + super("" + name); + this.nextThread = nextThread; + } + + public void run() { + Integer msg = dequeue(); + while (nextThread.enqueue(msg)) { + msg = dequeue(); + if (msg == -1) { + break; + } + } + } + + public boolean enqueue(Integer hopsRemaining) { + if (hopsRemaining == 0) { + message = -1; + lastActedThreadName = this.getName(); + + // notify all the threads that transmission is over + LockSupport.unpark(this); + MessageThread current = nextThread; + while (current != this) { + current.message = -1; + LockSupport.unpark(current); + current = current.nextThread; + } + + return false; + } + + message = hopsRemaining - 1; + LockSupport.unpark(this); + return true; + } + + private Integer dequeue() { + while (message == null) { + LockSupport.park(); + } + + Integer msg = message; + if (msg != -1) { + message = null; + } + return msg; + } + } + @Benchmark + public void jmhTimeThreadRing() throws Exception { + + int hopCount = 1000; + + MessageThread first = null; + MessageThread last = null; + for (int i = THREAD_COUNT; i >= 1; i--) { + first = new MessageThread(first, i); + if (i == THREAD_COUNT) { + last = first; + } + } + // close the ring: + last.nextThread = first; + + // start all Threads + MessageThread t = first; + do { + t.start(); + t = t.nextThread; + } while (t != first); + + first.enqueue(hopCount); + first.join(); // wait for System.exit + } +} |