summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Tremoulet <jotrem@microsoft.com>2017-09-14 15:11:48 -0400
committerJoseph Tremoulet <jotrem@microsoft.com>2017-09-15 13:46:58 -0400
commite05511683b49b798f30b2b9fcad01425d4ef5c31 (patch)
tree90c92e27436d30afbbd867005aff411ea7106f82
parentd0099ff43166d145e4899bb568ecc9e41aaa2d9a (diff)
downloadcoreclr-e05511683b49b798f30b2b9fcad01425d4ef5c31.tar.gz
coreclr-e05511683b49b798f30b2b9fcad01425d4ef5c31.tar.bz2
coreclr-e05511683b49b798f30b2b9fcad01425d4ef5c31.zip
Modify benchmarks to run in perf test harness
- Add result validation - Add [Benchmark] attributes and appropriate iteration counts - Minor edits here and there to target .NET Standard 1.4 - Exception: pi-digits rewritten to use managed BitInteger instead of p/invoke out to GMP.
-rw-r--r--.gitattributes2
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.cs58
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.csproj41
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.cs40
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.csproj41
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.cs33
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.cs24
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.cs21
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.cs25
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/harness-helpers.cs102
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.cs87
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.cs72
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.cs59
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.cs77
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.cs29
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.cs169
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/harness-helpers.cs94
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.cs73
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.cs50
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25.txt9
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25000.txt4171
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/harness-helpers.cs97
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.cs70
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.cs57
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.csproj49
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.cs31
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.csproj38
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.cs30
-rw-r--r--tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.csproj38
42 files changed, 6015 insertions, 221 deletions
diff --git a/.gitattributes b/.gitattributes
index add84340ad..27e6703185 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -69,6 +69,8 @@ src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt text eol=lf
tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25.txt text eol=lf
tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regexdna/regexdna-input25000.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25.txt text eol=lf
+tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25000.txt text eol=lf
tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/revcomp-input25.txt text eol=lf
tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/revcomp-input25000.txt text eol=lf
tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/knucleotide-input.txt text eol=lf
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.cs
index 7422274bc7..ead40714dc 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.cs
@@ -18,16 +18,36 @@
using System;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
+using Microsoft.Xunit.Performance;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureGCCounts]
namespace BenchmarksGame
{
- public sealed class BinaryTrees
+ public sealed class BinaryTrees_5
{
public const int MinDepth = 4;
- public static void Main(string[] args)
+ public static int Main(string[] args)
{
var n = args.Length == 0 ? 0 : int.Parse(args[0]);
+
+ int check = Bench(n, true);
+ int expected = 4398;
+
+ // Return 100 on success, anything else on failure.
+ return check - expected + 100;
+ }
+
+ [Benchmark(InnerIterationCount = 7)]
+ public static void RunBench()
+ {
+ Benchmark.Iterate(() => Bench(16, false));
+ }
+
+ static int Bench(int n, bool verbose)
+ {
var maxDepth = n < (MinDepth + 2) ? MinDepth + 2 : n;
var stretchDepth = maxDepth + 1;
@@ -44,8 +64,8 @@ namespace BenchmarksGame
var count = 0;
if (depthCopy >= 17)
{
- // Parallelized computation for relatively large tasks
- var miniTasks = new Task<int>[iterationCount];
+ // Parallelized computation for relatively large tasks
+ var miniTasks = new Task<int>[iterationCount];
for (var i = 0; i < iterationCount; i++)
miniTasks[i] = Task.Run(() => TreeNode.CreateTree(depthCopy).CountNodes());
Task.WaitAll(miniTasks);
@@ -54,8 +74,8 @@ namespace BenchmarksGame
}
else
{
- // Sequential computation for smaller tasks
- for (var i = 0; i < iterationCount; i++)
+ // Sequential computation for smaller tasks
+ for (var i = 0; i < iterationCount; i++)
count += TreeNode.CreateTree(depthCopy).CountNodes();
}
return $"{iterationCount}\t trees of depth {depthCopy}\t check: {count}";
@@ -63,12 +83,26 @@ namespace BenchmarksGame
}
Task.WaitAll(tasks);
- Console.WriteLine("stretch tree of depth {0}\t check: {1}",
- stretchDepth, stretchDepthTask.Result);
- foreach (var task in tasks)
- Console.WriteLine(task.Result);
- Console.WriteLine("long lived tree of depth {0}\t check: {1}",
- maxDepth, maxDepthTask.Result);
+ if (verbose)
+ {
+ int count = 0;
+ Action<string> printAndSum = (string s) =>
+ {
+ Console.WriteLine(s);
+ count += int.Parse(s.Substring(s.LastIndexOf(':') + 1).TrimStart());
+ };
+
+ printAndSum(String.Format("stretch tree of depth {0}\t check: {1}",
+ stretchDepth, stretchDepthTask.Result));
+ foreach (var task in tasks)
+ printAndSum(task.Result);
+ printAndSum(String.Format("long lived tree of depth {0}\t check: {1}",
+ maxDepth, maxDepthTask.Result));
+
+ return count;
+ }
+
+ return 0;
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.csproj
new file mode 100644
index 0000000000..e032f83eb6
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-best.csproj
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ <GCStressIncompatible>true</GCStressIncompatible>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.cs
index 6de000caea..e84c83174c 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.cs
@@ -14,23 +14,43 @@
*/
using System;
+using Microsoft.Xunit.Performance;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureGCCounts]
namespace BenchmarksGame
{
- class BinaryTrees
+ public class BinaryTrees_2
{
const int minDepth = 4;
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
int n = 0;
if (args.Length > 0) n = Int32.Parse(args[0]);
+ int check = Bench(n, true);
+ int expected = 4398;
+
+ // Return 100 on success, anything else on failure.
+ return check - expected + 100;
+ }
+
+ [Benchmark(InnerIterationCount = 7)]
+ public static void RunBench()
+ {
+ Benchmark.Iterate(() => Bench(16, false));
+ }
+
+ static int Bench(int n, bool verbose)
+ {
int maxDepth = Math.Max(minDepth + 2, n);
int stretchDepth = maxDepth + 1;
int check = (TreeNode.bottomUpTree(stretchDepth)).itemCheck();
- Console.WriteLine("stretch tree of depth {0}\t check: {1}", stretchDepth, check);
+ int checkSum = check;
+ if (verbose) Console.WriteLine("stretch tree of depth {0}\t check: {1}", stretchDepth, check);
TreeNode longLivedTree = TreeNode.bottomUpTree(maxDepth);
@@ -43,13 +63,19 @@ namespace BenchmarksGame
{
check += (TreeNode.bottomUpTree(depth)).itemCheck();
}
+ checkSum += check;
- Console.WriteLine("{0}\t trees of depth {1}\t check: {2}",
- iterations, depth, check);
+ if (verbose)
+ Console.WriteLine("{0}\t trees of depth {1}\t check: {2}", iterations, depth, check);
}
- Console.WriteLine("long lived tree of depth {0}\t check: {1}",
- maxDepth, longLivedTree.itemCheck());
+ check = longLivedTree.itemCheck();
+ checkSum += check;
+
+ if (verbose)
+ Console.WriteLine("long lived tree of depth {0}\t check: {1}", maxDepth, check);
+
+ return checkSum;
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.csproj
new file mode 100644
index 0000000000..e032f83eb6
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees-serial.csproj
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ <GCStressIncompatible>true</GCStressIncompatible>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.cs
index c11f6a8cac..cecd0be637 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.cs
@@ -17,10 +17,14 @@
using System;
using System.Threading;
using System.Runtime.CompilerServices;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- public static class FannkuchRedux
+ public static class FannkuchRedux_5
{
static int[] fact, chkSums, maxFlips;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -98,9 +102,30 @@ namespace BenchmarksGame
maxFlips[taskId] = maxflips;
}
- public static void Main(string[] args)
+ public static int Main(string[] args)
{
int n = args.Length > 0 ? int.Parse(args[0]) : 7;
+ int sum = Bench(n, true);
+
+ int expected = 228;
+
+ // Return 100 on success, anything else on failure.
+ return sum - expected + 100;
+ }
+
+ [Benchmark(InnerIterationCount = 20)]
+ [InlineData(10, 73196)]
+ public static void RunBench(int n, int expectedSum)
+ {
+ Benchmark.Iterate(() =>
+ {
+ int sum = Bench(n, false);
+ Assert.Equal(expectedSum, sum);
+ });
+ }
+
+ static int Bench(int n, bool verbose)
+ {
fact = new int[n + 1];
fact[0] = 1;
var factn = 1;
@@ -124,7 +149,9 @@ namespace BenchmarksGame
chksum += chkSums[i];
if (maxFlips[i] > maxflips) maxflips = maxFlips[i];
}
- Console.Out.WriteLineAsync(chksum + "\nPfannkuchen(" + n + ") = " + maxflips);
+ if (verbose) Console.Out.WriteLineAsync(chksum + "\nPfannkuchen(" + n + ") = " + maxflips);
+
+ return chksum;
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.csproj
new file mode 100644
index 0000000000..147e656df5
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{F49D82D3-9D13-47B5-83F8-52B1FE3FF452}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.cs
index 8c3f37d950..f03f6dc830 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.cs
@@ -13,10 +13,14 @@
*/
using System;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class FannkuchRedux
+ public class FannkuchRedux_2
{
public static int[] fannkuch(int n)
{
@@ -71,11 +75,27 @@ namespace BenchmarksGame
} while (true);
}
- static void Main(string[] args)
+ static int Main(string[] args)
{
int n = (args.Length > 0) ? Int32.Parse(args[0]) : 7;
var pf = fannkuch(n);
Console.Write("{0}\nPfannkuchen({1}) = {2}\n", pf[0], n, pf[1]);
+
+ int expected = 228;
+
+ // Return 100 on success, anything else on failure.
+ return pf[0] - expected + 100;
+ }
+
+ [Benchmark(InnerIterationCount = 7)]
+ [InlineData(10, 73196)]
+ public static void RunBench(int n, int expectedSum)
+ {
+ Benchmark.Iterate(() =>
+ {
+ var pf = fannkuch(n);
+ Assert.Equal(expectedSum, pf[0]);
+ });
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.csproj
new file mode 100644
index 0000000000..56d2c065b9
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fannkuch-redux/fannkuch-redux-serial.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E4AA647E-10E6-40E1-BD01-3BA97AA204BC}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.cs
index 9c3d1eb137..6b7e528ba8 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.cs
@@ -23,10 +23,13 @@ using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using Microsoft.Xunit.Performance;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class Fasta
+ public class Fasta_1
{
const int LineLength = 60;
@@ -35,14 +38,26 @@ namespace BenchmarksGame
const int IC = 29573;
static int seed = 42;
- public static void Main(string[] args)
+ public static int Main(string[] args)
{
int n = args.Length > 0 ? Int32.Parse(args[0]) : 1000;
+ Bench(n, true);
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 4000)]
+ public static void RunBench()
+ {
+ Benchmark.Iterate(() => Bench(5000, false));
+ }
+
+ static void Bench(int n, bool verbose)
+ {
MakeCumulative(IUB);
MakeCumulative(HomoSapiens);
- using (var s = Console.OpenStandardOutput())
+ using (var s = (verbose ? Console.OpenStandardOutput() : Stream.Null))
{
MakeRepeatFasta("ONE", "Homo sapiens alu", Encoding.ASCII.GetBytes(ALU), n * 2, s);
MakeRandomFasta("TWO", "IUB ambiguity codes", IUB, n * 3, s);
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.csproj
new file mode 100644
index 0000000000..8deda2377e
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E85110FB-64D0-44E7-B040-1862B62A6EAC}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.cs
index aa5fc0704f..6073a2f842 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.cs
@@ -16,19 +16,34 @@
using System;
using System.IO;
using System.Text;
+using Microsoft.Xunit.Performance;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class Fasta
+ public class Fasta_2
{
- static void Main(string[] args)
+ static int Main(string[] args)
+ {
+ int n = args.Length > 0 ? Int32.Parse(args[0]) : 1000;
+
+ Bench(n, true);
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 2500)]
+ public static void RunBench()
+ {
+ Benchmark.Iterate(() => Bench(5000, false));
+ }
+
+ static void Bench(int n, bool verbose)
{
MakeCumulative(HomoSapiens);
MakeCumulative(IUB);
- int n = args.Length > 0 ? Int32.Parse(args[0]) : 1000;
-
- using (Stream s = Console.OpenStandardOutput())
+ using (Stream s = (verbose ? Console.OpenStandardOutput() : Stream.Null))
{
MakeRepeatFasta("ONE", "Homo sapiens alu", Encoding.ASCII.GetBytes(ALU), n * 2, s);
MakeRandomFasta("TWO", "IUB ambiguity codes", IUB, n * 3, s);
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.csproj
new file mode 100644
index 0000000000..94e4bedd0e
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta-serial.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{BC31B732-E7E4-4458-8D14-3DBF63A4A576}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/harness-helpers.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/harness-helpers.cs
new file mode 100644
index 0000000000..d7b9a5754c
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/harness-helpers.cs
@@ -0,0 +1,102 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// Helper functionality to locate inputs and find outputs for
+// k-nucleotide benchmark in CoreCLR test harness
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace BenchmarksGame
+{
+ class TestHarnessHelpers
+ {
+ public string InputFile;
+ public int[] expectedCountLetter;
+ public int[] expectedCountPairs;
+ public int[] expectedCountFragments;
+ public int[][] expectedFrequencies;
+
+ public TestHarnessHelpers(bool bigInput, [System.Runtime.CompilerServices.CallerFilePath] string csFileName = "")
+ {
+ if (bigInput)
+ {
+ InputFile = FindInputFile("knucleotide-input-big.txt", csFileName);
+ expectedCountLetter = new int[] { 302923, 301375, 198136, 197566 };
+ expectedCountPairs = new int[] { 91779, 91253, 91225, 90837, 60096, 60030, 59889, 59795, 59756, 59713, 59572, 59557, 39203, 39190, 39081, 39023 };
+ expectedCountFragments = new int[] { 11765, 3572, 380, 7, 7 };
+ }
+ else
+ {
+ InputFile = FindInputFile("knucleotide-input.txt", csFileName);
+ expectedCountLetter = new int[] { 1576, 1480, 974, 970 };
+ expectedCountPairs = new int[] { 496, 480, 470, 420, 316, 315, 310, 302, 298, 292, 273, 272, 202, 201, 185, 167 };
+ expectedCountFragments = new int[] { 54, 24, 4, 0, 0 };
+ }
+ expectedFrequencies = new int[][] { expectedCountLetter, expectedCountPairs };
+ }
+
+ public string FindInputFile(string inputFile, string csFileName)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ // The convention is that the csproj file has the same name as the cs file.
+ string projectName = Path.GetFileNameWithoutExtension(csFileName);
+ int slashIndex = projectName.LastIndexOfAny(new char[] { '/', '\\' });
+ if (slashIndex != -1)
+ {
+ // csFileName was generated by the C# compiler, which may have run on
+ // a different host system with different path separator than the
+ // currently executing host, which dictates GetFileNameWithoutExtension's
+ // behavior... so hope that the slash here is a cross-host path separator,
+ // and chop of what were likely direcotires.
+ projectName = projectName.Substring(slashIndex + 1);
+ }
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "k-nucleotide", projectName, inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputFile);
+ }
+ else
+ {
+ throw new Exception($"Unable to find input file {inputFile}. Tried {inputPathNormal} and {inputPathPerf}; csFileName was {csFileName}, so projectName was {projectName}.");
+ }
+
+ return inputPath;
+ }
+ }
+}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.cs
index 990417d311..5a33c9b559 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.cs
@@ -20,11 +20,16 @@ using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureGCCounts]
namespace BenchmarksGame
{
class Wrapper { public int v = 1; }
- public static class KNucleotide
+ public static class KNucleotide_9
{
const int BLOCK_SIZE = 1024 * 1024 * 8;
static List<byte[]> threeBlocks = new List<byte[]>();
@@ -64,10 +69,8 @@ namespace BenchmarksGame
}
}
- static void loadThreeData()
+ static void loadThreeData(Stream stream)
{
- var stream = Console.OpenStandardInput();
-
// find three sequence
int matchIndex = 0;
var toFind = new[] { (byte)'>', (byte)'T', (byte)'H', (byte)'R', (byte)'E', (byte)'E' };
@@ -221,12 +224,14 @@ namespace BenchmarksGame
});
}
- static string writeFrequencies(Dictionary<long, Wrapper> freq, int fragmentLength)
+ static string writeFrequencies(Dictionary<long, Wrapper> freq, int fragmentLength, int[] expected, ref bool ok)
{
var sb = new StringBuilder();
double percent = 100.0 / freq.Values.Sum(i => i.v);
+ int idx = 0;
foreach (var kv in freq.OrderByDescending(i => i.Value.v))
{
+ ok &= (kv.Value.v == expected[idx++]);
var keyChars = new char[fragmentLength];
var key = kv.Key;
for (int i = keyChars.Length - 1; i >= 0; --i)
@@ -241,24 +246,49 @@ namespace BenchmarksGame
return sb.ToString();
}
- static string writeCount(Dictionary<long, Wrapper> dictionary, string fragment)
+ static string writeCount(Dictionary<long, Wrapper> dictionary, string fragment, int expected, ref bool ok)
{
long key = 0;
for (int i = 0; i < fragment.Length; ++i)
key = (key << 2) | tonum[fragment[i]];
Wrapper w;
var n = dictionary.TryGetValue(key, out w) ? w.v : 0;
+ ok &= (n == expected);
return string.Concat(n.ToString(), "\t", fragment);
}
- public static void Main(string[] args)
+ public static int Main(string[] args)
+ {
+ var helpers = new TestHarnessHelpers(bigInput: false);
+ bool ok = Bench(helpers, true);
+
+ return (ok ? 100 : -1);
+ }
+
+ [Benchmark(InnerIterationCount = 1)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+ bool ok = true;
+
+ Benchmark.Iterate(() =>
+ {
+ ok &= Bench(helpers, false);
+ });
+ Assert.True(ok);
+ }
+
+ static bool Bench(TestHarnessHelpers helpers, bool verbose)
{
tonum['c'] = 1; tonum['C'] = 1;
tonum['g'] = 2; tonum['G'] = 2;
tonum['t'] = 3; tonum['T'] = 3;
tonum['\n'] = 255; tonum['>'] = 255; tonum[255] = 255;
- loadThreeData();
+ using (var inputStream = new FileStream(helpers.InputFile, FileMode.Open))
+ {
+ loadThreeData(inputStream);
+ }
Parallel.ForEach(threeBlocks, bytes =>
{
@@ -266,21 +296,32 @@ namespace BenchmarksGame
bytes[i] = tonum[bytes[i]];
});
- var task18 = count4(18, 34359738367, d => writeCount(d, "GGTATTTTAATTTATAGT"));
- var task12 = count4(12, 8388607, d => writeCount(d, "GGTATTTTAATT"));
- var task6 = count(6, 0b1111111111, d => writeCount(d, "GGTATT"));
- var task4 = count(4, 0b111111, d => writeCount(d, "GGTA"));
- var task3 = count(3, 0b1111, d => writeCount(d, "GGT"));
- var task2 = count(2, 0b11, d => writeFrequencies(d, 2));
- var task1 = count(1, 0, d => writeFrequencies(d, 1));
-
- Console.Out.WriteLineAsync(task1.Result);
- Console.Out.WriteLineAsync(task2.Result);
- Console.Out.WriteLineAsync(task3.Result);
- Console.Out.WriteLineAsync(task4.Result);
- Console.Out.WriteLineAsync(task6.Result);
- Console.Out.WriteLineAsync(task12.Result);
- Console.Out.WriteLineAsync(task18.Result);
+ bool ok = true;
+
+ var task18 = count4(18, 34359738367, d => writeCount(d, "GGTATTTTAATTTATAGT", helpers.expectedCountFragments[4], ref ok));
+ var task12 = count4(12, 8388607, d => writeCount(d, "GGTATTTTAATT", helpers.expectedCountFragments[3], ref ok));
+ var task6 = count(6, 0b1111111111, d => writeCount(d, "GGTATT", helpers.expectedCountFragments[2], ref ok));
+ var task4 = count(4, 0b111111, d => writeCount(d, "GGTA", helpers.expectedCountFragments[1], ref ok));
+ var task3 = count(3, 0b1111, d => writeCount(d, "GGT", helpers.expectedCountFragments[0], ref ok));
+ var task2 = count(2, 0b11, d => writeFrequencies(d, 2, helpers.expectedFrequencies[1], ref ok));
+ var task1 = count(1, 0, d => writeFrequencies(d, 1, helpers.expectedFrequencies[0], ref ok));
+
+ if (verbose)
+ {
+ Console.Out.WriteLineAsync(task1.Result);
+ Console.Out.WriteLineAsync(task2.Result);
+ Console.Out.WriteLineAsync(task3.Result);
+ Console.Out.WriteLineAsync(task4.Result);
+ Console.Out.WriteLineAsync(task6.Result);
+ Console.Out.WriteLineAsync(task12.Result);
+ Console.Out.WriteLineAsync(task18.Result);
+ }
+ else
+ {
+ Task.WaitAll(task1, task2, task3, task4, task6, task12, task18);
+ }
+
+ return ok;
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.csproj
new file mode 100644
index 0000000000..9e72ba4a0f
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-best.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{06749069-420D-4F3E-8977-49B720EFE4CB}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="knucleotide-input.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="knucleotide-input-big.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.cs
index 8123e02720..644d52c4ca 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.cs
@@ -16,9 +16,15 @@ using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
+[assembly: MeasureGCCounts]
namespace BenchmarksGame
{
+
public struct ByteString : IEquatable<ByteString>
{
public byte[] Array;
@@ -78,14 +84,44 @@ namespace BenchmarksGame
}
}
- public class program
+ public class KNucleotide_1
{
+ public static int Main(string[] args)
+ {
+ var helpers = new TestHarnessHelpers(bigInput: false);
+
+ using (var inputFile = new FileStream(helpers.InputFile, FileMode.Open))
+ {
+ if (!Bench(inputFile, helpers, true))
+ {
+ return -1;
+ }
+ }
+
+ return 100;
+ }
- public static void Main(string[] args)
+ [Benchmark(InnerIterationCount = 3)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+ bool ok = true;
+
+ Benchmark.Iterate(() =>
+ {
+ using (var inputFile = new FileStream(helpers.InputFile, FileMode.Open))
+ {
+ ok &= Bench(inputFile, helpers, false);
+ }
+ });
+ Assert.True(ok);
+ }
+
+ static bool Bench(Stream inputStream, TestHarnessHelpers helpers, bool verbose)
{
string line;
- StreamReader source = new StreamReader(Console.OpenStandardInput());
+ StreamReader source = new StreamReader(inputStream);
var input = new List<string>();
while ((line = source.ReadLine()) != null)
@@ -101,12 +137,16 @@ namespace BenchmarksGame
KNucleotide kn = new KNucleotide(input.GetBytes());
input = null;
- for (int f = 1; f < 3; f++) kn.WriteFrequencies(f);
+ bool ok = true;
+ for (int f = 1; f < 3; f++)
+ ok &= kn.WriteFrequencies(f, helpers.expectedFrequencies[f - 1], verbose);
+ int i = 0;
foreach (var seq in
new[] { "GGT", "GGTA", "GGTATT", "GGTATTTTAATT",
"GGTATTTTAATTTATAGT"})
- kn.WriteCount(seq);
+ ok &= kn.WriteCount(seq, helpers.expectedCountFragments[i++], verbose);
+ return ok;
}
}
@@ -125,25 +165,35 @@ namespace BenchmarksGame
public KNucleotide(byte[] s) { sequence = s; }
- public void WriteFrequencies(int length)
+ public bool WriteFrequencies(int length, int[] expectedCounts, bool verbose)
{
GenerateFrequencies(length);
var items = new List<KeyValuePair<ByteString, Count>>(frequencies);
items.Sort(SortByFrequencyAndCode);
double percent = 100.0 / (sequence.Length - length + 1);
+ bool ok = true;
+ int i = 0;
foreach (var item in items)
- Console.WriteLine("{0} {1:f3}",
- item.Key.ToString(), item.Value.V * percent);
- Console.WriteLine();
+ {
+ ok &= (item.Value.V == expectedCounts[i++]);
+ if (verbose)
+ {
+ Console.WriteLine("{0} {1:f3}",
+ item.Key.ToString(), item.Value.V * percent);
+ }
+ }
+ if (verbose) Console.WriteLine();
+ return ok;
}
- public void WriteCount(string fragment)
+ public bool WriteCount(string fragment, int expectedCount, bool verbose)
{
GenerateFrequencies(fragment.Length);
Count count;
if (!frequencies.TryGetValue(new ByteString(fragment), out count))
count = new Count(0);
- Console.WriteLine("{0}\t{1}", count.V, fragment);
+ if (verbose) Console.WriteLine("{0}\t{1}", count.V, fragment);
+ return (count.V == expectedCount);
}
private void GenerateFrequencies(int length)
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.csproj
new file mode 100644
index 0000000000..d65aaae57d
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/k-nucleotide/k-nucleotide-serial.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{72C2713D-C5A4-4BE0-82F3-3B7EEB4DB574}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="knucleotide-input.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="knucleotide-input-big.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.cs
index 1602a5da7c..e0dcafa04d 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.cs
@@ -18,10 +18,15 @@ using System;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.CompilerServices;
+using System.Security.Cryptography;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- public class MandelBrot
+ public class MandelBrot_4
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static byte getByte(double[] Crb, double Ciby, int x, int y)
@@ -53,9 +58,54 @@ namespace BenchmarksGame
return (byte)(res ^ -1);
}
- public static void Main(String[] args)
+ public static int Main(String[] args)
+ {
+ var n = args.Length > 0 ? Int32.Parse(args[0]) : 80;
+ var data = DoBench(n);
+ Console.Out.WriteLine("P4\n{0} {0}", n);
+ Console.OpenStandardOutput().Write(data, 0, data.Length);
+
+ if (!MatchesChecksum(data, "3B-EF-65-05-1D-39-7F-9B-96-8D-EF-98-BF-06-CE-74"))
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ // Commented out data left in source to provide checksums for each case
+
+ [Benchmark(InnerIterationCount = 7)]
+ //[InlineData(1000, "B2-13-51-CE-B0-29-2C-4E-75-5E-91-19-18-E4-0C-D9")]
+ //[InlineData(2000, "5A-21-55-9B-7B-18-2F-34-9B-33-C5-F9-B5-2C-40-56")]
+ //[InlineData(3000, "E5-82-85-0A-3C-89-69-B1-A8-21-63-52-75-B3-C8-33")]
+ [InlineData(4000, "C7-E6-66-43-66-73-F8-A8-D3-B4-D7-97-2F-FC-A1-D3")]
+ //[InlineData(5000, "6D-36-F1-F6-37-8F-34-EB-52-F9-2D-11-89-12-B2-2F")]
+ //[InlineData(6000, "8B-05-78-EB-2E-0E-98-F2-C7-39-76-ED-0F-A9-D2-B8")]
+ //[InlineData(7000, "01-F8-F2-2A-AB-70-C7-BA-E3-64-19-E7-D2-84-DF-57")]
+ //[InlineData(8000, "C8-ED-D7-FB-65-66-3A-D9-C6-04-9E-96-E8-CA-4F-2C")]
+ public static void Bench(int n, string checksum)
+ {
+ byte[] bytes = null;
+
+ Benchmark.Iterate(() =>
+ {
+ bytes = DoBench(n);
+ });
+
+ Assert.True(MatchesChecksum(bytes, checksum));
+ }
+
+ static bool MatchesChecksum(byte[] bytes, string checksum)
+ {
+ using (var md5 = MD5.Create())
+ {
+ byte[] hash = md5.ComputeHash(bytes);
+ return (checksum == BitConverter.ToString(hash));
+ }
+ }
+
+ static byte[] DoBench(int n)
{
- var n = args.Length > 0 ? Int32.Parse(args[0]) : 200;
double invN = 2.0 / n;
var Crb = new double[n + 7];
for (int i = 0; i < n; i++) { Crb[i] = i * invN - 1.5; }
@@ -68,8 +118,7 @@ namespace BenchmarksGame
for (int x = 0; x < lineLen; x++)
data[offset + x] = getByte(Crb, Ciby, x * 8, y);
});
- Console.Out.WriteLine("P4\n{0} {0}", n);
- Console.OpenStandardOutput().Write(data, 0, data.Length);
+ return data;
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.csproj
new file mode 100644
index 0000000000..3ab35800e2
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{4BF33255-0CAD-42CA-81F0-60E536BA4E9D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.cs
index 2542ecf0e0..8715cf788f 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.cs
@@ -14,26 +14,82 @@
using System;
using System.IO;
+using System.Security.Cryptography;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class Mandelbrot
+ public class Mandelbrot_2
{
-
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
-
- int width = 100;
+ int width = 80;
if (args.Length > 0)
width = Int32.Parse(args[0]);
+ int lineLen = (width - 1) / 8 + 1;
+ var bytes = new byte[width * lineLen];
+ var memStream = new MemoryStream(bytes);
+
+ DoBench(width, memStream, true);
+
+ if (!MatchesChecksum(bytes, "3B-EF-65-05-1D-39-7F-9B-96-8D-EF-98-BF-06-CE-74"))
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ // Commented out data left in source to provide checksums for each case
+
+ [Benchmark]
+ //[InlineData(1000, "B2-13-51-CE-B0-29-2C-4E-75-5E-91-19-18-E4-0C-D9")]
+ //[InlineData(2000, "5A-21-55-9B-7B-18-2F-34-9B-33-C5-F9-B5-2C-40-56")]
+ //[InlineData(3000, "E5-82-85-0A-3C-89-69-B1-A8-21-63-52-75-B3-C8-33")]
+ [InlineData(4000, "C7-E6-66-43-66-73-F8-A8-D3-B4-D7-97-2F-FC-A1-D3")]
+ //[InlineData(5000, "6D-36-F1-F6-37-8F-34-EB-52-F9-2D-11-89-12-B2-2F")]
+ //[InlineData(6000, "8B-05-78-EB-2E-0E-98-F2-C7-39-76-ED-0F-A9-D2-B8")]
+ //[InlineData(7000, "01-F8-F2-2A-AB-70-C7-BA-E3-64-19-E7-D2-84-DF-57")]
+ //[InlineData(8000, "C8-ED-D7-FB-65-66-3A-D9-C6-04-9E-96-E8-CA-4F-2C")]
+ public static void Bench(int width, string checksum)
+ {
+ int lineLen = (width - 1) / 8 + 1;
+ byte[] bytes = null;
+
+ Benchmark.Iterate(() =>
+ {
+ bytes = new byte[width * lineLen];
+ var memStream = new MemoryStream(bytes);
+
+ DoBench(width, memStream, false);
+ });
+
+ Assert.True(MatchesChecksum(bytes, checksum));
+ }
+
+ static bool MatchesChecksum(byte[] bytes, string checksum)
+ {
+ using (var md5 = MD5.Create())
+ {
+ byte[] hash = md5.ComputeHash(bytes);
+ return (checksum == BitConverter.ToString(hash));
+ }
+ }
+
+ static void DoBench(int width, MemoryStream s, bool verbose)
+ {
int height = width;
int maxiter = 50;
double limit = 4.0;
- Console.WriteLine("P4");
- Console.WriteLine("{0} {1}", width, height);
- Stream s = Console.OpenStandardOutput(1024);
+ if (verbose)
+ {
+ Console.WriteLine("P4");
+ Console.WriteLine("{0} {1}", width, height);
+ }
for (int y = 0; y < height; y++)
{
@@ -71,6 +127,11 @@ namespace BenchmarksGame
if (xcounter != 0)
s.WriteByte((byte)((bits << (8 - xcounter)) ^ 0xff));
}
+
+ if (verbose)
+ {
+ s.WriteTo(Console.OpenStandardOutput());
+ }
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.csproj
new file mode 100644
index 0000000000..c84799234f
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/mandelbrot/mandelbrot-serial.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{18ED6F79-05F2-4302-B2B5-543A33C9A517}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.cs
index e0692a8cb3..19d504fcd3 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.cs
@@ -14,18 +14,39 @@
*/
using System;
+using Microsoft.Xunit.Performance;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class NBody
+ public class NBody_3
{
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
int n = args.Length > 0 ? Int32.Parse(args[0]) : 10000;
+ bool success = Bench(n, true);
+ return (success ? 100 : -1);
+ }
+
+ [Benchmark(InnerIterationCount = 2)]
+ public static void RunBench()
+ {
+ Benchmark.Iterate(() => Bench(5000000, false));
+ }
+
+ static bool Bench(int n, bool verbose)
+ {
NBodySystem bodies = new NBodySystem();
- Console.WriteLine("{0:f9}", bodies.Energy());
+ double initialEnergy = bodies.Energy();
+ if (verbose) Console.WriteLine("{0:f9}", initialEnergy);
for (int i = 0; i < n; i++) bodies.Advance(0.01);
- Console.WriteLine("{0:f9}", bodies.Energy());
+ double finalEnergy = bodies.Energy();
+ if (verbose) Console.WriteLine("{0:f9}", finalEnergy);
+ double deltaEnergy = Math.Abs(initialEnergy - finalEnergy);
+ bool result = deltaEnergy < 1e-4;
+ if (verbose) Console.WriteLine("Energy {0} conserved", result ? "was" : "was not");
+ return result;
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.csproj
new file mode 100644
index 0000000000..da46bac201
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/n-body/n-body-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.cs
index 4bcf75425e..53b8fa9cb5 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.cs
@@ -6,6 +6,8 @@
// http://benchmarksgame.alioth.debian.org/u64q/program.php?test=pidigits&lang=csharpcore&id=3
// Best-scoring C# .NET Core version as of 2017-09-01
// (also best-scoring single-threaded C# .NET Core version as of 2017-09-01)
+// **** Version #3 on website pinvokes to native GMP library; this has been modified to
+// use .NET's System.Numerics.BigInteger type instead ****
/* The Computer Language Benchmarks Game
http://benchmarksgame.alioth.debian.org/
@@ -16,19 +18,23 @@
* java port by Stefan Krause
*/
using System;
+using System.Numerics;
using System.Text;
-using System.Runtime.InteropServices;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
+
public class pidigits
{
-
- GmpInteger q = new GmpInteger(), r = new GmpInteger(), s = new GmpInteger(), t = new GmpInteger();
- GmpInteger u = new GmpInteger(), v = new GmpInteger(), w = new GmpInteger();
+ BigInteger q = new BigInteger(), r = new BigInteger(), s = new BigInteger(), t = new BigInteger();
+ BigInteger u = new BigInteger(), v = new BigInteger(), w = new BigInteger();
int i;
- StringBuilder strBuf = new StringBuilder(40);
+ StringBuilder strBuf = new StringBuilder(40), lastBuf = null;
int n;
pidigits(int n)
@@ -38,74 +44,78 @@ namespace BenchmarksGame
private void compose_r(int bq, int br, int bs, int bt)
{
- u.mul(r, bs);
- r.mul(r, bq);
- v.mul(t, br);
- r.add(r, v);
- t.mul(t, bt);
- t.add(t, u);
- s.mul(s, bt);
- u.mul(q, bs);
- s.add(s, u);
- q.mul(q, bq);
+ u = r * bs;
+ r *= bq;
+ v = t * br;
+ r += v;
+ t *= bt;
+ t += u;
+ s *= bt;
+ u = q * bs;
+ s += u;
+ q *= bq;
}
/* Compose matrix with numbers on the left. */
private void compose_l(int bq, int br, int bs, int bt)
{
- r.mul(r, bt);
- u.mul(q, br);
- r.add(r, u);
- u.mul(t, bs);
- t.mul(t, bt);
- v.mul(s, br);
- t.add(t, v);
- s.mul(s, bq);
- s.add(s, u);
- q.mul(q, bq);
+ r *= bt;
+ u = q * br;
+ r += u;
+ u = t * bs;
+ t *= bt;
+ v = s * br;
+ t += v;
+ s *= bq;
+ s += u;
+ q *= bq;
}
/* Extract one digit. */
private int extract(int j)
{
- u.mul(q, j);
- u.add(u, r);
- v.mul(s, j);
- v.add(v, t);
- w.div(u, v);
- return w.intValue();
+ u = q * j;
+ u += r;
+ v = s * j;
+ v += t;
+ w = u / v;
+ return (int)w;
}
/* Print one digit. Returns 1 for the last digit. */
- private bool prdigit(int y)
+ private bool prdigit(int y, bool verbose)
{
strBuf.Append(y);
if (++i % 10 == 0 || i == n)
{
- if (i % 10 != 0) for (int j = 10 - (i % 10); j > 0; j--) { strBuf.Append(" "); }
+ if (i % 10 != 0)
+ for (int j = 10 - (i % 10); j > 0; j--)
+ { strBuf.Append(" "); }
strBuf.Append("\t:");
strBuf.Append(i);
- Console.WriteLine(strBuf);
+ if (verbose) Console.WriteLine(strBuf);
+ lastBuf = strBuf;
strBuf = new StringBuilder(40);
}
return i == n;
}
/* Generate successive digits of PI. */
- void Run()
+ void Run(bool verbose)
{
int k = 1;
i = 0;
- q.set(1);
- r.set(0);
- s.set(0);
- t.set(1);
+ q = 1;
+ r = 0;
+ s = 0;
+ t = 1;
for (; ; )
{
int y = extract(3);
if (y == extract(4))
{
- if (prdigit(y)) return;
+ if (prdigit(y, verbose))
+ return;
compose_r(10, -10 * y, 0, 1);
}
else
@@ -116,71 +126,34 @@ namespace BenchmarksGame
}
}
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
- pidigits m = new pidigits(Int32.Parse(args[0]));
- m.Run();
+ int n = (args.Length > 0 ? Int32.Parse(args[0]) : 10);
+ string result = Bench(n, true).ToString();
+ if (result != "3141592653\t:10")
+ {
+ return -1;
+ }
+ return 100;
}
- }
- [StructLayout(LayoutKind.Sequential)]
- struct mpz_t
- {
- public int _mp_alloc;
- public int _mp_size;
- public IntPtr ptr;
- }
-
- class GmpInteger
- {
-
- // Public methods
-
- public GmpInteger()
+ public static StringBuilder Bench(int n, bool verbose)
{
- mpz_init(ref pointer);
+ pidigits m = new pidigits(n);
+ m.Run(verbose);
+ return m.lastBuf;
}
+ }
- public GmpInteger(int value)
+ public class PiDigits_3
+ {
+ [Benchmark]
+ [InlineData(3000, "8649423196\t:3000")]
+ public static void RunBench(int n, string expected)
{
- mpz_set_si(ref pointer, value);
+ StringBuilder result = null;
+ Benchmark.Iterate(() => result = pidigits.Bench(n, false));
+ Assert.Equal(expected, result.ToString());
}
-
- public void set(int value) { mpz_set_si(ref pointer, value); }
-
- public void mul(GmpInteger src, int val) { mpz_mul_si(ref pointer, ref src.pointer, val); }
-
- public void add(GmpInteger op1, GmpInteger op2) { mpz_add(ref pointer, ref op1.pointer, ref op2.pointer); }
-
- public void div(GmpInteger op1, GmpInteger op2) { mpz_tdiv_q(ref pointer, ref op1.pointer, ref op2.pointer); }
-
- public int intValue() { return mpz_get_si(ref pointer); }
-
- public double doubleValue() { return mpz_get_d(ref pointer); }
-
- // Non public stuff
-
- mpz_t pointer;
-
- [DllImport("gmp", EntryPoint = "__gmpz_init")]
- extern static void mpz_init(ref mpz_t value);
-
- [DllImport("gmp", EntryPoint = "__gmpz_mul_si")]
- extern static void mpz_mul_si(ref mpz_t dest, ref mpz_t src, int val);
-
- [DllImport("gmp", EntryPoint = "__gmpz_add")]
- extern static void mpz_add(ref mpz_t dest, ref mpz_t src, ref mpz_t src2);
-
- [DllImport("gmp", EntryPoint = "__gmpz_tdiv_q")]
- extern static void mpz_tdiv_q(ref mpz_t dest, ref mpz_t src, ref mpz_t src2);
-
- [DllImport("gmp", EntryPoint = "__gmpz_set_si")]
- extern static void mpz_set_si(ref mpz_t src, int value);
-
- [DllImport("gmp", EntryPoint = "__gmpz_get_si")]
- extern static int mpz_get_si(ref mpz_t src);
-
- [DllImport("gmp", EntryPoint = "__gmpz_get_d")]
- extern static double mpz_get_d(ref mpz_t src);
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.csproj
new file mode 100644
index 0000000000..55a5ee7ef7
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pidigits-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E37DE574-AFEC-40E8-B513-FBB09D5EFFFF}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/harness-helpers.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/harness-helpers.cs
new file mode 100644
index 0000000000..25627bad5a
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/harness-helpers.cs
@@ -0,0 +1,94 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// Helper functionality to locate inputs and find outputs for
+// regex-redux benchmark in CoreCLR test harness
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace BenchmarksGame
+{
+ class TestHarnessHelpers
+ {
+ public string InputFile;
+ public int ExpectedLength;
+
+ public TestHarnessHelpers(bool bigInput, [System.Runtime.CompilerServices.CallerFilePath] string csFileName = "")
+ {
+ if (bigInput)
+ {
+ InputFile = FindInputFile("regexdna-input25000.txt", csFileName);
+ ExpectedLength = 136381;
+ }
+ else
+ {
+ InputFile = FindInputFile("regexdna-input25.txt", csFileName);
+ ExpectedLength = 152;
+ }
+ }
+
+ public string FindInputFile(string inputFile, string csFileName)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ // The convention is that the csproj file has the same name as the cs file.
+ string projectName = Path.GetFileNameWithoutExtension(csFileName);
+ int slashIndex = projectName.LastIndexOfAny(new char[] { '/', '\\' });
+ if (slashIndex != -1)
+ {
+ // csFileName was generated by the C# compiler, which may have run on
+ // a different host system with different path separator than the
+ // currently executing host, which dictates GetFileNameWithoutExtension's
+ // behavior... so hope that the slash here is a cross-host path separator,
+ // and chop of what were likely direcotires.
+ projectName = projectName.Substring(slashIndex + 1);
+ }
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "regex-redux", projectName, inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputFile);
+ }
+ else
+ {
+ throw new Exception($"Unable to find input file {inputFile}. Tried {inputPathNormal} and {inputPathPerf}; csFileName was {csFileName}, so projectName was {projectName}.");
+ }
+
+ return inputPath;
+ }
+ }
+}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.cs
index ced28d7d91..1fbbbe6d15 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.cs
@@ -14,12 +14,17 @@
*/
using System;
+using System.IO;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- public static class regexredux
+ public class RegexRedux_5
{
static Regex regex(string re)
{
@@ -35,9 +40,40 @@ namespace BenchmarksGame
return r + " " + c;
}
- public static void Main(string[] args)
+ public static int Main(string[] args)
+ {
+ var helpers = new TestHarnessHelpers(bigInput: false);
+
+ using (var inputStream = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var input = new StreamReader(inputStream))
+ {
+ if (Bench(input, true) != helpers.ExpectedLength)
+ {
+ return -1;
+ }
+ }
+
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 14)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+
+ Benchmark.Iterate(() =>
+ {
+ using (var inputStream = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var input = new StreamReader(inputStream))
+ {
+ Assert.Equal(helpers.ExpectedLength, Bench(input, false));
+ }
+ });
+ }
+
+ static int Bench(TextReader inputReader, bool verbose)
{
- var sequences = Console.In.ReadToEnd();
+ var sequences = inputReader.ReadToEnd();
var initialLength = sequences.Length;
sequences = Regex.Replace(sequences, ">.*\n|\n", "");
@@ -61,17 +97,26 @@ namespace BenchmarksGame
var variant9 = Task.Run(() => regexCount(sequences, "agggtaa[cgt]|[acg]ttaccct"));
var variant8 = Task.Run(() => regexCount(sequences, "agggta[cgt]a|t[acg]taccct"));
- Console.Out.WriteLineAsync(variant1.Result);
- Console.Out.WriteLineAsync(variant2.Result);
- Console.Out.WriteLineAsync(variant3.Result);
- Console.Out.WriteLineAsync(variant4.Result);
- Console.Out.WriteLineAsync(variant5.Result);
- Console.Out.WriteLineAsync(variant6.Result);
- Console.Out.WriteLineAsync(variant7.Result);
- Console.Out.WriteLineAsync(variant8.Result);
- Console.Out.WriteLineAsync(variant9.Result);
- Console.Out.WriteLineAsync("\n" + initialLength + "\n" + sequences.Length);
- Console.Out.WriteLineAsync(magicTask.Result.ToString());
+ if (verbose)
+ {
+ Console.Out.WriteLineAsync(variant1.Result);
+ Console.Out.WriteLineAsync(variant2.Result);
+ Console.Out.WriteLineAsync(variant3.Result);
+ Console.Out.WriteLineAsync(variant4.Result);
+ Console.Out.WriteLineAsync(variant5.Result);
+ Console.Out.WriteLineAsync(variant6.Result);
+ Console.Out.WriteLineAsync(variant7.Result);
+ Console.Out.WriteLineAsync(variant8.Result);
+ Console.Out.WriteLineAsync(variant9.Result);
+ Console.Out.WriteLineAsync("\n" + initialLength + "\n" + sequences.Length);
+ Console.Out.WriteLineAsync(magicTask.Result.ToString());
+ }
+ else
+ {
+ Task.WaitAll(variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9);
+ }
+
+ return magicTask.Result;
}
}
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.csproj
new file mode 100644
index 0000000000..cd45a0937c
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-best.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{FCEF2E71-7E24-4306-9CCA-56BD251FB66E}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="regexdna-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="regexdna-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.cs
index 61f380a8eb..9604672d33 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.cs
@@ -15,17 +15,52 @@
*/
using System;
+using System.IO;
using System.Text.RegularExpressions;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class regexredux
+ public class RegexRedux_1
{
- static void Main(string[] args)
+ static int Main(string[] args)
{
+ var helpers = new TestHarnessHelpers(bigInput: false);
+
+ using (var inputStream = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var input = new StreamReader(inputStream))
+ {
+ if (Bench(input, true) != helpers.ExpectedLength)
+ {
+ return -1;
+ }
+ }
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 5)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+
+ Benchmark.Iterate(() =>
+ {
+ using (var inputStream = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var input = new StreamReader(inputStream))
+ {
+ Assert.Equal(helpers.ExpectedLength, Bench(input, false));
+ }
+ });
+ }
+
+ static int Bench(TextReader inputReader, bool verbose)
+ {
// read FASTA sequence
- String sequence = Console.In.ReadToEnd();
+ String sequence = inputReader.ReadToEnd();
int initialLength = sequence.Length;
// remove FASTA sequence descriptions and new-lines
@@ -54,7 +89,8 @@ namespace BenchmarksGame
r = new Regex(v, RegexOptions.Compiled);
for (Match m = r.Match(sequence); m.Success; m = m.NextMatch()) count++;
- Console.WriteLine("{0} {1}", v, count);
+ if (verbose)
+ Console.WriteLine("{0} {1}", v, count);
}
@@ -72,8 +108,10 @@ namespace BenchmarksGame
r = new Regex(iub.code, RegexOptions.Compiled);
sequence = r.Replace(sequence, iub.alternatives);
}
- Console.WriteLine("\n{0}\n{1}\n{2}",
- initialLength, codeLength, sequence.Length);
+ if (verbose)
+ Console.WriteLine("\n{0}\n{1}\n{2}", initialLength, codeLength, sequence.Length);
+
+ return sequence.Length;
}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.csproj
new file mode 100644
index 0000000000..a2acf1f1fe
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regex-redux-serial.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{EFF6D8FE-2713-41B7-BF77-8DD03BADFAB6}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="regexdna-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="regexdna-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25.txt
new file mode 100644
index 0000000000..c32ac3c876
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25.txt
@@ -0,0 +1,9 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatt
+>THREE Homo sapiens frequency
+agggtaaagtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtc
+ttttccctttaacaaagatactctgggcaacacacatacttctctcatgttgtttcttcg
+gacct
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25000.txt b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25000.txt
new file mode 100644
index 0000000000..fd4414b176
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/regex-redux/regexdna-input25000.txt
@@ -0,0 +1,4171 @@
+>ONE Homo sapiens alu
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG
+GAGGCCGAGGCGGGCGGATC
+>TWO IUB ambiguity codes
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta
+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata
+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc
+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg
+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca
+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga
+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat
+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM
+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR
+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg
+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc
+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc
+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa
+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt
+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat
+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt
+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt
+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt
+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR
+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat
+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac
+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS
+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga
+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM
+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt
+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt
+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta
+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac
+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt
+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc
+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt
+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat
+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta
+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD
+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg
+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH
+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact
+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV
+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa
+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag
+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata
+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg
+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN
+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc
+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg
+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga
+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa
+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca
+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata
+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat
+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt
+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW
+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata
+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata
+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt
+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac
+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta
+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS
+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc
+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata
+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa
+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata
+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt
+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW
+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt
+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa
+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt
+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD
+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc
+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta
+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM
+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc
+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc
+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt
+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga
+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag
+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc
+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat
+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta
+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt
+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa
+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB
+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR
+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta
+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta
+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK
+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW
+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc
+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct
+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt
+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa
+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa
+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa
+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR
+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac
+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc
+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac
+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag
+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc
+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact
+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc
+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga
+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt
+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR
+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat
+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg
+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac
+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR
+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga
+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg
+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa
+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag
+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg
+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN
+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt
+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa
+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat
+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg
+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt
+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW
+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta
+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV
+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta
+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt
+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa
+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa
+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM
+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK
+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV
+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN
+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg
+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg
+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct
+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM
+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD
+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc
+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga
+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR
+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt
+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa
+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB
+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat
+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt
+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag
+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat
+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta
+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM
+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc
+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt
+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata
+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK
+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt
+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa
+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa
+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg
+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK
+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga
+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca
+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg
+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS
+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg
+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat
+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact
+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat
+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD
+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM
+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt
+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat
+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta
+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc
+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac
+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS
+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD
+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB
+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct
+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga
+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY
+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga
+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta
+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY
+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc
+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta
+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt
+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc
+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat
+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc
+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa
+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga
+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat
+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt
+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa
+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat
+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca
+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata
+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat
+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa
+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM
+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca
+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa
+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac
+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt
+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK
+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat
+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR
+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc
+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct
+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN
+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat
+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt
+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt
+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct
+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa
+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta
+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg
+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat
+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct
+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY
+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt
+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat
+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc
+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt
+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg
+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg
+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag
+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga
+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg
+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV
+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt
+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa
+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa
+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD
+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct
+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac
+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB
+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD
+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca
+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat
+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK
+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt
+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta
+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat
+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa
+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg
+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta
+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc
+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct
+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat
+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac
+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg
+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt
+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa
+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga
+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt
+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt
+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg
+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc
+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD
+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat
+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD
+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM
+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt
+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa
+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat
+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag
+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa
+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc
+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta
+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN
+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt
+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc
+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag
+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR
+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg
+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH
+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM
+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc
+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW
+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt
+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW
+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN
+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta
+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg
+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat
+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc
+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat
+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa
+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg
+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt
+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc
+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc
+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac
+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc
+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR
+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR
+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa
+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc
+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta
+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt
+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag
+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc
+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa
+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg
+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta
+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa
+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga
+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM
+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta
+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct
+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc
+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD
+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV
+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct
+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc
+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca
+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt
+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt
+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM
+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc
+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat
+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg
+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH
+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc
+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM
+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta
+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV
+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa
+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata
+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc
+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga
+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta
+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag
+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat
+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB
+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac
+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa
+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa
+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa
+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat
+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg
+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat
+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat
+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg
+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat
+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg
+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga
+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB
+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata
+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat
+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt
+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag
+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa
+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca
+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt
+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta
+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt
+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat
+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta
+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt
+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc
+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt
+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt
+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD
+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa
+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc
+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa
+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc
+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt
+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa
+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc
+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta
+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa
+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga
+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa
+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt
+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat
+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH
+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa
+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV
+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg
+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca
+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa
+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB
+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa
+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS
+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR
+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM
+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt
+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH
+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc
+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa
+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt
+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt
+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta
+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY
+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt
+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa
+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa
+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt
+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY
+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc
+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa
+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact
+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta
+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt
+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM
+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat
+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat
+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW
+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa
+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt
+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK
+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta
+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg
+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag
+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca
+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV
+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS
+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact
+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca
+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta
+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca
+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc
+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa
+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg
+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta
+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN
+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt
+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt
+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg
+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac
+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca
+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat
+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN
+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc
+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM
+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa
+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc
+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat
+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg
+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca
+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag
+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc
+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat
+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH
+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata
+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD
+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata
+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg
+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM
+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa
+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt
+atatatagtcttaaaaMtcatgttcaaDactgRttctaagagDtatttttagcgacttgt
+gRtgNctgSgRaaaaatgcaMtYtDcatcaaYKttHcatSWgaaaatDataggttatgBD
+MtgttataacaaYSgagttacgttatgtDStttaaatctcgWKtcSacgagagaSgttat
+BMDgtcggtgtgcgaNtaSHBatBtttVMgVcagaNatcaDDaKMtMYtatagaBccctc
+tDtgtatttatatKNtgggtatgtRaacttgaWaaYgcaHatccctggtttStatMtcgc
+MtaaaWKttMVtWctVtgttaKDWctgWaVttaDVatgKtagagtcatctaKWgtaaMtt
+SacBaMattaKaaHDataattgWtgttttgtcatBacacgtStacaaagtNctNtgtgat
+cHtWttcKaagagttttaaaaWacgRacatctNatVStgaatDHgttWcgtRKcatatat
+ctcaNttaaBDcctgaaaaaDtaYaHaKttNtaYVaVtttaDtctacttctWttaactaa
+ttttMagWcaatcccNKYtBaacatgttgaKgKcgcBHaatDMttatatcSWacatDatR
+cWaMtDgatBctHgScttaaaHtSgKtDtttattgtRStWgttccatatttcacWttcat
+attgtaHVgaBtacaMtgMaaagDaataactDatattagMaNBagcttcattcgtaaKtg
+tatttcacMtgBaVtaattStcttagtYgtgtcgccttKatgggtgaWaataggaatacM
+MagaSKRttBgatgacRtgMtagaSRataggtatcaccgaNaaaWSWacDgatacttgat
+tagcttgtgVMttatYctaRgHVcDtVRRtSaMtcaVtVtatcaYaHatattaaVaatct
+aBtgtacRatNtatttgaYatSaHctaNgNtYtYaYagattVgatcRtaacgYggtgtat
+KttaatMagatgRtatatgHaKccHaaaaYtgaacgaWaNgtYHgacagaYtctaVtacc
+cgatttttaaagcDttatNRgattKaaattttcatctaatgccgcaataataattgttat
+YtagtRNtaagttggtHaKttWMtDKgatSagBYcgRggtWaVaattHtatgtaaaMgSa
+aagataaKaaKgttDttttRaagaacaWRcaacDgtgttaatattaKtatcaWacacatt
+tVtctgatHRcagtttNcaaatcNctNttttataactWacBBttgBttaaaRaWtBKaaa
+cgtatcRcaMaatgYacaaaagtgBataStWYtggtatgacaKWtctSgcKHgtcNaMNc
+ataSatattgactacMcataattNVtDaRccaaatcagttttYttagYaacgtaatMtMV
+atNgKaaMaaBgattaKttatDaBcttKtccttttacDagaYtacHgttggacaaaVaat
+agtYatcataSgatcaaWVttcgaatgaccctccttNtaSBWaatttDttttcaatatYg
+gctatDcttatNctttagDcMttcaacWaaNattSYgctttcaHcRaattaataaaatcV
+ccRaattactctaMaVRattacagtgRcDtcgtgctcttNtWVtacagtHtatHaBDtcW
+ggtgctcaaRHtatgtDgacStgcaaaVKtagttataatactaatatgtagScaatRSac
+aattgtattgcagatHHtgBcaatKKtaaMMcaRcgactatKBaMaYatgKatttDaaNt
+RatattgtatWttagcaaaaacaWgcacaaHcataYtDaHgttataaSacgcagggggtY
+atgcKctaaaHgcVgctBDaVttccStagNgcSgtatgVYaMatcaWRBtVtgYttgtgR
+cYttcgctgaacNttgtgtctattWttttcctagMtagaWtaKgatStScatMaBtaSta
+SactattYNatctgtacRatYDaatgatgatatgaatYaaaaSHttaaYMaWtDcaNHaB
+caYtgVgcatVaacattMRatBtaatttaDacRtagtaaaNYVSMtcagaaDtttDHtRc
+YatacSNKaaMcHgatBaaVttactggBYgaYatttttgcDacHctWatcgtagagtact
+cattDggtcatKaSgctttatttagtDtRBacttaWYaaaattttgaccttaaWtaatgc
+RgccacttMtaggKtcBtgacgaHctttatcgtcStatMHDNagattatNagVaaaWcgg
+aaaYcaVactDYactaStattgBHtcYctgggtacatataaYcgaYagaggaggacaVat
+acHRtYtctgtaVgaYcNgaaaNatacVgcNgtaatttDcatttttcaacttSNcaaDat
+VYctSgcaccttagMgacgcttgaSttaaaatagttaggRHttaaacMatagcaWgMgag
+tcgctagtgtKgactaaHttattaWgcaaaaaaSatatgcgttaBNggttaYVatgaact
+ttttgccatataaataRatSaBctagttataBccgaaacaagatacttaattttgaHgHM
+gtaaKctttaYtaaRacBMtBaYgaBaaacaYtVtagcRgWatHaWagattWSacStMHa
+tttaDagacaatcgtgtKtttggaMtgtWtgtgcaaNaaaaWtKaaBcMWtcttctatga
+cVgagcgaggHaYYtttWgSaaYYaWtRYHHaMDtctttacaatggaaMctataagcttB
+cgHcNWaatttgtatatYtStatctagcactgtVttccagaaattaDtttaRtVataBtt
+WagcatDMVactYtgcatWtttgaaMggKaatgaaaaHtataDtgYcMggVaaatSMHtt
+tgVttaYaWaataRttgttaYttattttRtWtataaBgtDtttatatcVgaaBcaDtatg
+tcaDagaWtgaYtWctcVagctcagctatatagcRVtcaKtaataatHgNaccgaaaatV
+HBaatattcgttaVYttatttctBYaatKaagaccVStttcattgaMagSaaaaccccWK
+caaNtMYacctaDStagaaatttatcatVgtcaatacccKattgtaaagtggWgtatatV
+tagBcttDaBacaattWtDYKtatRKggStRtaaaWatBtaagtaattDaaaaBRacWta
+agtacaSttaaatccgctaaccKaattgVWttDattatttattKaMtcYtMRWagMtcgK
+gBagacgggVaaNaaatgctKcgtaataaKtaaagtccWcttHMatSYgataaatDttBa
+HccattgBttSgaaHYtaataaaMtgaagatgtttBgRcattaRaDHcttBgaMaWaaVM
+MattaatttgtgBRctattgKMagNcMtatttaaaWttgaaacatWgcScgYYDYgttYt
+VtattgcKcWtagcggtgBaSctaKatacaaVtcaRDccccgtgttBgKgggtHagcgaa
+ttaaagMMttScggtDttttaHcSaagaacactcacactBcVgaKNaDHacacttatSag
+aattSKHtcagtataaatKaaHtgaaRagaaVcBtaHtaaatcgatcWcaRtaaaattta
+WttaagtcaggRctgaWcttDttgactttaVSaaaatggtaWDaRMtBtaaaaaKatBga
+tMtctatatcaVaMgatttgNagtDRttDatcttttaMtYaaatcggagttctctaYatN
+tagaNcgMMactacHcaagtaaaatStaSaacaHcacSgggtNKatggaaagcggaaKgg
+gtaYtacSgccgBaggcRacgtVgDtggaMcYaaaMatggacgYStKKatgaBcaaRtSt
+ccSagcRccgccgcSDtgcggBDgaDtBtSSggacMttttaWcatcMatgtNMBWgataa
+tcaaVtgaataataaNatgcaaNttNctgacDMcaHccgatgKgWVttccaStggattct
+cDacttttttctttaaNcWaMWccWKWttgaaaMctDaaBactRtVattttBtcMaNttW
+cKacagttKSttaYaWSactHSaBtHgatgttacatgcatatMtttgtaacScWHBatHa
+ctggatatatctgagMgRSatctaaSttaVagcaRcttggaYaatKHtagBBactattcg
+taaagaagttgtVcgatgaVatHMtcaggtcgKSgWattgaaaVctccVgtDcaaatgaa
+HgMYactcaMatatatattNVttWtWaatttacRagKataaaNtttacaaWgMVactatt
+aSgaggVaaagVtaccDRHaaataRaHaRgcattMttcaatcaKaaataDcaDKtctcga
+ggBggacctDtttatHacWVaWgatDctaNaNcgKatcMtcMaatBtttggacgtgataa
+tagaaacRactcBtattttaKtgSaaggKtaggRaVtatagcccaNRttaccttSMaaga
+tcggDacNBatWcgaactacactaactNBtaStgVtNagcatctaVtaKatKgaBtcgtt
+tWaagWMgagRaNatHaaaaDtacagacaBagtgcaHaNatctcBccNttaagttDgaat
+aaNtcgctaacRBgtaatSttaatatgcataacccaSattKcccttDttggtcaatgggt
+tWaacgatacattBtgMaYgaRttatgatKaKgtattDtKWgataacgNBtaccgaKWat
+cttcttKtgtcttagcattcctWcaaHgagtatDMSgKtcagcttgVHaKcttDaataaa
+VaatttDgtgaaataaRgtcaVaatacttagtVatatgggcatgtDDtMtgtatBggatt
+HtgcVtgtgatcaaSattatKYVaacSNNttNWcgaHttKDaaMYHatcgttaattaStt
+gctWaacHtaKBtaaaaKHttcRWgaaWcRtBtttggBcDtgtacNttaagcKtaHgtag
+aaaaRttgaaacatagtWRaacYggtaaatcgctYaBtWDRtgttgSctaaKatNcattg
+tgtMttatccatatagctSacgccSNaaactacgNtgtgcttMatSKtcaaBaNaaacat
+aacagaaatagtagctcNcatcVgaagStaataVcDKKttcagDHDtattctaatgaggg
+RgBMctatacaagYactctMaaagtcgctttctcgtgaattatNcgatMtttaggcBaaa
+tctNtactaaRKtgKactattgtcatatgtacgagttMaaHSSgHgBatatcgcaSaata
+aaWgaagtatagaHgcttctttatgaccWaatttaRtaDaatttaatcgaaattgattMc
+atcaWaMtaWaKactttctBacactatNgtccttaWgtctgaccKatStaKtgagtacgg
+gcgcgtYNtatttagacctctKcatgatKWStcaataactaWgMSgHtgatctttttgtc
+gacgtSacttaYgcctWctcctctacaagVtttMaBactWVaccaYtgtSgcgttattcK
+tatStgaaKaccgNaataaHtatWtYtRacggcaDaScagcagHaYWRtRNcDtHtcVWt
+ggaataaaYttgVaNtgttagtYttgtagSaaatDgaggccDcgBRYStattatttaagg
+ccgHgggYRaaccMaagttatSttctttagcMtgcgMtgaSagaNaDagttSatgattWa
+tttagtDgcttgagtgMKaYWaYccagcaHatKctaKaDgctagacttattgattaaYtt
+atcttattattStaattWaRaYBWagYaatatgttRgScttgBagDaWgcgtgcVDaggc
+ttgtctaDRKacttgcaKBWRtaaVaSctKtacttMaaSVaWWcgSaNtttSWgtcggtc
+acttggVVtgagaataaataaDttgaaccaaaaMttaaaagaaaaaaaatcNBtatMgcc
+WagcaNgaVaNaaaaaaYaMgttaWtatHaagtNtacgacaBtMMattttWNaRtaaata
+gYaScKattacagctVKBtWNSKgYtYgtWatHaVatDaaatWgDatcctggSRagagta
+aaaMgatttRtaHacatggtaKagVcctgatgaMtaaYgatgtattattttHggBaccaD
+ctctggNNtYaatctVttgVtRtVcRacttNctttataggHSRtaRacaaattaacHaHg
+tgttgtttcBtBtatWtgtattttgcKagMcaaagaMtattagtStagcBacYaaHcagV
+gWtgtttcgtgDHaVtagDatcRaRtggtWtaactgcacgaggaaaRttSDaaVaSttaa
+aaacSMttactaNtcaacaattDtacttttYatVSacYtWtMttaattatcKtcttctat
+caKDtctStSaaacggtYccatgtgagagtWtagWKgcaBaaaaKttgNactaatcgagg
+cWtcDDaaaaaacactHattaattcactatYttaagacactaKaagRtRataaattttca
+tHggtaataaatgataHtggctaacBacDgtaatattRtYgtDNDBgKtcaggcHatttt
+gHNgWtaatttccgactactgacatVNttYYgactcgctctatttagaMcgggatHcgtt
+tatBaDSagBaaaagRttBggttaaBactVHgatgaatttattcaaaattgcacttcDga
+cttYcVttactVtttatBaKHagaWgtgaatggBtaaSggcagacNcttaDttVgMtWag
+attggVatttacHtctNcMatacttSatMagcttgtNcYaaScaYactcKctKtagScSt
+cagtttcatWaatggtgagaggHaggggcaacgcRKtaRcMaNtHaatRaRaaactVtBt
+gttaatRtWWcaaagKttccaaKaaatacgVttcacaaacgcggtgagaRaatggtgDMW
+atcWVScacaaaDaggaaHtgttSMaaaaaccYccDBtatYgtMagcSagaccaVcctcg
+gtVWaaagttatcNaagataataSaataaaKccgtaDtYttatYcttHttaagKcMctaa
+atggaatRgaaaVaaVtcKYaggatWcaBtDaggDatccttcYNtgcSMRgaRtNgaatc
+gttRttatDVMtagctttacatDVtatatatcagctaDagMtataccYgaggYaaatgDa
+aaatSgctctgatgtttVaaBcctgataKtagaaaccaKatatgttaDtgaDtatagata
+atacagtaDtatcNtgtDMtYcattRVtctataNtWttggNaSgtMgaaYctctDggHtg
+gHDccaccacKKaaacaaaatRatttccctttaagcRattMHctattHaRtataVattgg
+atcSttaaHaHgaaHNDtacattSaaggDatttcaaaYgctBcatattaaaKagtgccca
+tSctcgatRtaaaMtgWactttNMaWctYgRatDggaactcDcaattaKaactgagtatc
+tataagYaaaSRctggtacWtttccWtaYRtKHattatagWtKttaNgcDtatHacccat
+taatttataacgctMgaagtaacaacagMgtaYHYVtKMHtacMgKcaaatctgRYataN
+tcgttcaatacggWtMcaatYcBWaagYtVaDNagtatagDaaNtaaaYtttcYWttttS
+tgggataaMgatattagaaYtNctcttcBagactaYDcgtacHDWccKaHgttcttHgVg
+gVDttatcatKaMttttacWaaSattctatagaHaggKaDagBtaaagtcYccattgtYc
+atctaNgRgVtgaagtDKttatBKcggDtattRYgHccgtgcgBNMtttVRgacaYctSc
+taRacgtagagccgtacRaagtaHKagStSttttgYSatattaaaWHaaWagttDKaaNa
+NHaaHttaYcttMtcaaatgKttBtSgtccaaVaattSaacgttgNattgatatNctaWt
+VcagtactKcWacgVagggHaaRgaDaatcMttattaataacaBMaaVtgYtKgRgHact
+gtactatcBaMtVggtagKcYtHtBSaattagtaatgMcaVVagYYgWtactttccaaSt
+tDgaaMaMttcacttYtRgacttcagcttWtttagtgataMaattaagVtagaatatKat
+aagtagttaagHMRaDattaHaaVcctDtagtcVYcaataaYcNttNaaaHctcaRaatt
+tcaNRgatSHgVatagctRtcatgaBttMaaagRtcgHVtgRgStgatttgtagaKagaR
+WRctgNaHYgaaatBctgtttRttNWagaccgagKgtgcggHKVttaatattaatataat
+aDtaNcctacaaRgcaNMctctgaaSHWWHcttagtNagtWgWaaKtYaNgcBattatcc
+aaaSctRRHKaNtKcBgtgagaDRWBttactaaattSMctatatagaaYacDgatttccV
+taagRtgRataatatagtctttttatgtMgtcaacaaNtaaaaactctWtagaVaaaDta
+attatagtBStcgaatDtgattVaatMtcaDattVKWaagatagggttgtMRSgtcYgWM
+aatgNtagtcBttagtttctctWaaMtVgctWgSgtHagaSagactagKtagWggcattt
+HgttgacaaactcggggHggcWBgVgtatgggagVgagtcVcBtDctttagtctaagVWt
+HtgtttaScatacMBtKgattatRtgtttgtctttDggcHaBtRtgtaataNataattta
+taWctgaYWataStcHaatcRtaaVagDWaSatagtaccNDgaagtatacgttttacgac
+gKRtattgDctatRRattVtStaaactagatgVatttagaMaSaaaattVtatYtgttgt
+RMagtHaatttSttaaYNaggWagtgcacgaMcactgHgtgtgggHMgtKacttaaYgtc
+gcatcSatattgBaagtttacMtYagSatttatttaVtaaDtaWaHcgNatactgactHt
+ggWtataDcDScatactcStcDtgtcgtgtatgaggtHaaNKgDattgcBccaagKgtat
+gacKSMtttttgttcaaatcaaYtagtaSatgDaaaMccKNaMaatagaataagcaatta
+ttataaMgagtgaSgtctNYttattHaNaYYtcDDtaatNRgtatttaaYtaaatcactH
+VaHcStccttcccaaVatcVggatKtatgRaaDBgaYtttacttYggactSDtaBcaaNg
+gggtattatattBDcttagagYNMatBgttYaagactMatgttRgatacccgtaacacBH
+tatKacWgatRcHttaattYtKtStccaaatVDcaNKHHaaataatagtagtatcttgct
+NDggVaVVtaVaRaaagSaccgttctcMtVtgNBgtDtttctYgttactBctcRtStWtW
+DScMtcWSaRatgaataRHctaNtcStctYtWacagatgtatYBtHaHWBtacggtDcaa
+BtatcaggtcaVattaNctactgaaaatWaDgactNWtMtggagaattBaataYcMWYcg
+atMYatWtgattSatgaRtDaRgccagtSttatatRaBtattRcWtagtVgaagttMcta
+ttatatDttaggtctKtgtgtBagacgttatRKtgatctatttBtataactgataacKcg
+gagtgHgtVttcttgtKDgcDtaYatBDatcaatattgttNtaBacatcgcNcaKcaWcR
+ataWcVgtacgScaWgttcggHcMttcRccatgaRStYgNacagatacYacWWtggNaDc
+WagttHatMaNaatNtcDMDcMaKgHNatScVgatKWatatgNRgtccgYgaagattDHg
+tMtcHaSNaaattBatRagtaaatttacaagHWtKatcaagtccHtYcctgttKDMSgta
+ctactVctgacaaaaHgatatacataatKtStHgctScSatNatacaYttaaWHtctgaa
+tYtagtHtKaggccWBaStaDctaagagNtaatcaatcgttNgaYDaagtaaaaHataga
+atcgcgBaYaBgaacSaaWaaaaactccgcMttHttYgtaagaMctKBtacSagattcBa
+aWtaattttacRttatcgaRtacaRHgtgRagaaBcttaVgacVDgggaatVatagaact
+RRtacgYttNattVHgaHttacaaaaaaaYtcRWtgtgattatgccaSDtttatKWgaat
+atSNDgattttaacgtcSRtatggttcttcBtWtttMtBtMScttaHatBattHacYtaY
+acattcgttKgtcStSctcKtatatttcaKSgagcttccaacaccRDtttDaccattata
+tSgtcWtVaaagttgtagccattDtYaatattDaccatcVDaaRccagttttgtcHacMa
+ttcHgaNcatgttKcVttcctgtgcSataaatattgaKtctaWctMRaKggtaYcaagtt
+DttcgttacRtatgatggHNaWMtKttcatattaaDaSaBaaaMtMatBgKtttgHtHac
+taatcatcgtWaatKaaWcaWtcctVttaaNaggaaaagtaaagaDctNttaDBaBgata
+gMgaataacRcYggatcRaaaHaagatRDtVRactaYagttcaccaaWtctcSSaaatcS
+KattctggDgaacagDtaDagacagtgtaattcaStYttNaStgtaHgccttaScatMRc
+accWtcatttatRtaagatWtNataaWtMNtDVgWttgcWgtgaRttttRgWcttMtcta
+HacaaYtKctgaBagtRagacttDatNttaaaDgRtatNcHatcSDgtBatcttacVcYa
+cNgaattaacgagttgYgacttDattatacBattMgctagcctagatVcaactNttccta
+atgtDaacgYaNatagMatSWtYBaaaRtgMtatSRgaataYaScaVgtaScMagatNNt
+ttacaaHBaWtNtRtctaaacDaaaaWMcaNtcVaDNcagaDtgcWKYgagttaHtgcDY
+ataaacataBaWWtcggtatgtgaaScaacctttRNatcgttaaagcaDctaatgcBatt
+tacaattVaMgSMMtccYaaaBYtggattttcataWttgBtatDtBgactaatgtccWaa
+HataaScHttWttDtcgtcaagMctMDtaaaatRtBaaaacaatgtcagcatBgNNBVtt
+ttttcBacWtttWtSWWtgaaaaSacgBtaaataaagtcDStaagaactgttaatYatgD
+ctattactgaHtaaatStHaagacaKtagDtaaHaDgttccaaDtaaggacactctDggc
+gtDagtcWaHgRcHgDgaSctttattgtcttttccttRYaDgNactaaatcaWggcNSBa
+gttttatatStKgtcRtgattaaggtcaSBttaacaaKatgggatcaaattgRgcBagtN
+tcgDcatttWcctttgtNagDgctgcatttactttgtgtcaBgSatttNHaMcggcagSc
+tcKDtWBaagSagWatggYtVatSRgKagattgaVatKttcgatYatKYSgDaacNtcVg
+tttaWataWtgVctgcgSggMgatccatgagttgtWcatYWWcctVcNHagtNtgtKttt
+gatcaacttaSttattgatNcatWaVgNHcagStVHcggHacaaDttgDttWcaaRaKga
+aatKaattagtaWacattgaaatgtgaatgacagtgaRVtaaYagYtcggcatMttgaag
+gDgagDRcaKgHtacacaaaMcaBtagHactgKaatRtNttcttcatcatNgYgStggac
+tatgSMttgKtDaDgacRRgtWaVattgatttaagYctatatagactaagaggtatWtat
+aaactaYaHRctStgKWcgtRtKtYtYtagacgattRaaYBtaStcttaWataatcHtta
+taRcactgagtgggagccaattctcDtgDaggHcDRVaVVggaaBtRttaataaRRttgt
+aagKNcaVWWgtatacctgatcttBtcttRgaWcaVRKcagttSacttagcgtKtgtYWa
+tatcgNttcKaccacacVKctgattBtggacgtctgacaDtWKttattttgMBgKaacaD
+ataattWtBtBRtVtacataaatatttgtWtttatagtDtgcctagctHYaatgcaNaaR
+caatVtacctgggggKtagBgagaBgRaaNttttMtMagMtgtgattNctcNaKggWtMa
+tcttagWgtaatatatNctaYBggKaataBattYtaattataVtggNtcgtgtctaatta
+aacctHtacaaactDctDtctgatatgMtgataacWctgtgYSaaNScgDYaWtatDatM
+KgcaatttctgNcgtHtaWtagatatcYBttaattactcaaaVattYRWtatttDtaNMY
+MttgattataatgcgNggWaatYagttgBagNcaagaaaDtRgtaaaagctgcatctagc
+ttaVgtBttatagcKMSaattYtHcMaBttcagtcttgKatgVSVttKgttttttagtgt
+DHgNggtcaVtatttaacNtgaatatgctatMcatgaaaBtgBSaWctaataaattatYt
+tagtaDtaccggaatgagtaattggatttaacBtctSMgWYtgKgattacgRctctccaa
+tgtaggcctgaNaatScgYataaBBacaKtHtttcatgaaHtgBtagaKHVtacctVtca
+accaDaaWNHNaatgataattgatgWcagggtcMBtgSgRataHctMctgMHHtKaBtaa
+MtMgataaRWtagYtgaaMaSgctYtgcgaaHatDtatgtcWRatKatatYDcBgNtRaR
+acattMcagaHgaaagRccgcgWttggSatBagagcHgYtatctVtcatYaaVRtcaSac
+aMYDcgRtcaaWgaRgataMtaaaacaggtgtaaYcattgWgDHcWgttaVatttgcatc
+taatccacaaagaagSatgcgtagRgagtHDgaVcgtgcttatggMttttcatKSctNac
+HcctMaKRatttgatctaaatgHaaScataataatgtttgtgtHaVcaaaaNHaaaatcg
+ctgSVtattVttagaaNWcacagtgKtatgattHcYcttgDaWVataBatBttttWtaac
+tNaattttctttaaYHaMtttaaaccgStcHaVBaatcRacaaWactgtagVKtNRtcct
+agcWaatNgctKccttctcDaBDcatYHatatgcaataaBaagaatgDMttaHcaaYYtc
+actgttRtgacRaacctaWtBtBMagBctaaBaWtgatgVtttattataggttaattgta
+atYcaRtVctcttgcacSaaMaatactRSgcataKcagcaVNKttcgSatcaaactaatt
+DtaHtNaVtgttttttaWVtatNccagWttcgtatBcgttVctcBttaaaaMSaDattKR
+cctttcataHaattaatWaaataKcaHVaggaatataBYKHVtgVcVgtcHcttccgcct
+attDtMMgWaacttgWttYtttcMcgtcctaaVHtgWtggtgacKtcaWaYMttacttag
+VWtacgSatatcgWcKaaatHKaaaYttgtagtcaacWtttggtcaagttgaaBBaSHac
+VcgYgttWBSRWggtattttaYDtHatattcgatNttacaaaaVacaMccaaYStaataR
+ttVtcttagaVKaacaWcgccgtRatcatctaaatccMcctttaMggccHgYcDgaKcta
+tgMRYBagcaNDtgMtcRttgtgHaRttacatgaWcDtgctgtataggNggtgaatagBg
+agYNtatcagKtHcatBatgVKgaHWagattRDatatcgYcHagRtaatgWtcStagcVa
+tNaaaaKttgRaRBYNgtaaDtStaVRgcMccatMWaaattBDatttaatttataaHtag
+tVVaDRMKBtaacaatttttttDaRSgaaKDtVaBatcagtaaMttaagcctRgaNVggg
+ttcataatagNatcctacactacgcatgtcggaYgtaKcatggattgactttHtaattWN
+RaaWYggttcaaaggaaNtaatgcHcaaaattBtagcttattcaagVtatttWgcctaKt
+atBttDYcattagDacKVaYNccgYaYRaaMaattRaagaHtatgcttgcRagcgctSaa
+tagaaRacaRacSccagcacVMataatHgRtagcgaKgYRaDcVWSDVgRaMgcDgtaat
+tttaYttggtaaWcttKDaaYtatMRcgKccYcagtYcBgRccattcaKtgaSSRtactg
+acgHtgtaaaaBatWgcaMcBcYcgccagactcttcSatYattgatgaNccaaaaWaKat
+VgcaggtWtBcgttaRMagcaaagtgttcacatataaagaHWtKatctacttatatcacY
+RaaVagataagtaattttgatgtBctaataggtaRtaaHaattgtaRcStYSYaWRgMta
+caHcNSttVNScattNKaaKgBtagtgatYcaaaStactggttggggaBggtNtgtcaaW
+BaYVSNgtaataBNtagtatatcacMcScccVcgtVRRtttNcKaSRNaNtHRttattta
+ttgacaatggSaBagataaccgttcctaDNaattgctVtatNtHtatagSccaagctKtt
+aaacaaattattgtSHgMWgStttNaccattBMYatRtccStNgttgaaBcctVagcaaa
+atgatattcRaBccMWaagKtttttcMtgaRYNaataDttgttWRttattggHtNtataa
+tggttgtStYgaMcYVtcattaggtaatVcaNggaRtNataMWcctcYgcgagagRgcHM
+gcWtgaYtVSttgDaacgaaaatMttYWtWttcctgaKNttatttattRaattaagaccM
+KtttcWgtcaBagKSaWaaacaNtaYaDtBNaaagWtHgacaaagtgVtcatKcgcaatV
+aactatgcgaaactccNctatatMgactatttatSaaVttNttRttagHtccKtHtaaaN
+atttYVctaatttaaaatHWaNtSacgaaaHggaaatcacagVYcctaattcMNtgtYtg
+agttatttaBtcRgBHNacBtactctagaacgcKaaDWYYgcattactVagaYtgaVVcg
+caNctttBagKRcSgaaatttgtatccattgtggHcaatRtaVtaSaBtcYYcatcgtgt
+cHaVttaHattctgtcaBSNYaKBBattaatggctgtHatattgtBacDcBgatttaaaN
+tggaaaaYtNcaKagRRtRgttRtMtWgggatcNtacacctgtWKagatataaYVMtaaD
+taaacctctgtgtgccttScacWaggaYacttttKacgtttgtgataKYagaYaVatcWc
+SattaMcatBYttYaaatgStKagWattKtttaWgtagaaSgtRattcSaDagVaMatta
+ttYaagccSgcNaaDgaaSaggtaNgtWactaWcgHctgaNatttttcaatgtaMHSWaR
+tggtaNtaHBtttWWaaatattcVtBtctStWtaWMaBcatttcDagttDtttatatgtt
+WBtNaYatcccSgtgagcgaRYtBtagaDacBtaagaataWactaaaagKtaKaWaataa
+cKcccgDtagccaaagcggaatcgctSRtacKgcactacccHaactMgtgccaBaRaaaB
+VtcgSacRKtttStgatcaaHgKtaaKaccHaccacccKttgagcttcSttttKKcgacB
+gggtYMaatcBStcgDBtMcataWtaWaMtgaataagaaDatccSYDtgBatgactBaVt
+aagatctcNMgtcaWKtgcWggcgatacgtgtttatttWaDaNWBNaaNtNttcaaatag
+taatScgHtMWttgttgaBaDtgNatSaagtttHttaNaNKaattKatttgatcgtVcat
+gaatatBtttctaacKaNttVttSagccatRtatatcactcHHatctWSKttaMacaaDa
+ttccaRaYttttagttaatattcctYaacVactgctMcgagcaMYtttgaagctagtKgN
+WttgaaaMatcaMcttcSVatcaatgtNactaaBagatagagtDMgtNtNWatttSaHac
+tagaaaDggtaaaaNctMaatagtaHgacgMaaacMtacatHtaSagaHatYDccagtBt
+gaWatcYtVaagataattgatcgacctgcaacgttttattacNMWNcattataDVDacta
+tattatYattttgcgaagtgagYVtagYaWaHaatctgWttttatgcHaacgttaccDaK
+tatagaccaDDttaacgtHBaacatccgtYaBtVtNccaaataaaatVactDttSKtcMt
+DSgaagctaMtatattgattactgtNaagNBcagHaDattaaaWttacacaaatactcaa
+tSDatagctcaDttWactttgaStaaDtagatSaaDtgtaatKtgVataggaagWSaaaa
+KatttaaagtttgcgtaaagcccggNWaacatacatgttctaRcaHttVtcattatctag
+ttttNcataaacDttWaagVtNYtaggctttggtatgagaWgtactNaVatcactVttBK
+cttaaccttcMtatcggtaataYaMaYggttgtcaaagSWHctaRMSatVcggactMata
+tccgaatcttttttcgagtccagtttgaMtcgcatcaaKagtattRMaaaKDBttDNcca
+tttttaaBNtVtccgtaatgaKgtcagMVSattatttaWaattttaHNcaaMaHttgtgg
+ctattctacDtgaagattatcgacaaVRHttcSaSaatactNHWaaNcgtWaWgaccgRS
+ttNtHtcttcKatYatatBaagtcgctBtgagccatatScctKaagaaKDaWactWagBg
+ctgattBagKtgaaataBaaaaagSacScaaagagtagcgaDaYtaMcaYcKtaataMat
+ttttaactttgYgtcgaaggacgcHctBcgYgaaVacRYagagBaaYgtagattgcgagt
+caagtStDagatBgtgaccctaSWtctDgactaSHttctWatWttctaWtatctYacact
+gBWatKKctgtatYgacaaHSatYSaNgSagtatagatgagtatttatgaccMaatgtaH
+tStaWttgYagccaWattcagtBaYtaaNaBtaNatactggcttWcaagatDctacggaN
+ctatcacatSgKgattgacgacccccgagtNDtattgagaaatattaatcVttNKtaaWt
+YacgSNcBHgttgWtatgtttcgccaactKaattaRgacgNataatctacaacKgttBat
+YatNMSaaaNtctKgacttatgcttatKtcaVtVcagDaataattYgNtRtHaagcaata
+HcacaVgtaNNHtHDatgttaMNtggWagSVaRttcMVDtcttWgtRttctacKaaVttc
+VcgcatcctHRKtattSgttSacgaagtcccRDVaacBWagtgYtKtgattgSgaBtgcc
+BtcaKacaDatacttHatcattNatttacgtcagtgaggcBtaRNaRcaSgcatattatS
+tatgctYcacgtattcattaaRtgStcttWgtattKtSYttNaHaRtNYcRaYtVtggtD
+cKcttctactaMcacggcMtacgcttctatatHtaatggcattMDtaaMaKattgaagtB
+aaKMVMNacKaDtttKNcgagctaaagtccMMtgagaagVaataatggcaWaaaaVaBgt
+aSaVgaaaSaaaataDttVtBccaNagcSBgaMaDaVaVYYRVBgttYMtagtaactDta
+agWaattBtattttMDYHtSaStScRaKatattacacctMttgNBKtcRtRggNagtYMa
+ttaaatMctYgaatgcKHagSggaaaaBcaggtHtatWcatcgtStagMcctcatgatta
+WRcStcgWtgRgttttcctaacatcgctcgDDtRaatatMgtcMtHtMaDYatgDattta
+tagctKDtYHaaaaattaSatatctggtctttattttatMtgtYttgtcatactcaaVcY
+BgatgSctKtYcctWaRaataWcMgNgcgggagtcttRMgactataHaHtgctNtVaatc
+aaccacgSRaDtgKtaaMSKgtaaaaWaKtttVagSDtaaaaaatgttYattttNagMHa
+aRtNgBttWattatatgcttatatcatttatKtKaaaagctRaaatcgcYgacgNtacNt
+ccVtSaaatttcDVctaatacWgcaMtcttSaaWaaaWagtagtaattaactagRttaVc
+SaaatataacHgHatWaattggaagtgcgSSgaaVtgYgSttccatWVataatcgaatat
+gHtRcgtBttcttaaggatatgttgtBcNtaatgtcacVatactgaaatMBttRRcRatc
+catagagggacatcgccWttagttgWttatKagtaaaagHtttccttSatVatKtgagca
+atttattaaYVattcaaattctgSattRaMtgaatMgttattattacaNcggVagcctta
+aKgccYcaaDattWtggMcttMacWttccMVgtgaattctDaBYgacttKYtBacatgct
+DcRaaKaaRaatatctttagKcKtaactttaatNaaggctgScacctYgcgcaaaccaHt
+tVHcBaDgtaatHaHVaaatMgttggtSatHtNNaaVagtgtacaataaagacgKttcaa
+aWVacagctcacWHaatcctgtBNWtaNMKcVcVSWtSgcaattctgKtVVaaacaRaat
+tgatRcgBacaKacVccVMactagcgMNaaactgataDaSgagaatVHaatVSVtccgga
+tgRgtagRatttgtaactaBataVaggcaagHgaaSMSaKgctRagcStNcatttVgcta
+tacttcNDtcaKBDcaHtDcaatagttHttattMBgagctgtaaagtMgatStStcagat
+atYcBtataacRcaggRaaaggtaWSatKgatatgagcgtgMYatcagcatVttSgaaaa
+aatatatgttYttcattatacataatVcacgattataDggttBtRaagtHMtatagaDgN
+ttggDaKctBcaaRcgattcgtgccttacaaaWattYWVcaaWagDattgaaagggaaga
+HattBtatVggtaHtWtaMagtccagaKttSatatcaStDtgWaagtKWaggtatttaWa
+aRcattaatStgaaVtacggaacatKctacatHtaaaBtcNWatttBBaNatRcDattcg
+aactataaattataactcagtSgatataagRaYaKHctggtaaNtttaaNgaRHtttatt
+atacNttttaDccttYgtaaacaggaagtgataaacatBgaSgtaaaaaaVcBgtWNtRM
+ttBttaaBgtaaaatatcHNStaBtaggtaVatYaccNtBaWagRctNSacRtMatDact
+StVctaaDtaYSRgttaRNttttKggccagaaBcatagtYcaYNtDatcgtatVcaatWR
+taggaattMcatRtgggatgtcMggMtttataagtaBgtggacNaaKYtgctWgagYtWc
+ctWtVcttaaactaRacatggtRcatctSDcHcMgcaactttttagttaccttattHRgt
+acggcactDBggtMHcVaaRatKctSHacctacaccactaaHaacgSttagKtKttttgN
+HVgagtaYaMtVYNVcggttaSBaBtaatttSRcgtBgaWaatctttttKggacaWKaat
+tKSaccttgDRgtcatatDatVMtMaVcgaattaNaagMWccctaaHgataatatgtatt
+WataaaatBaaMtgRttcHctaagctaagatatattMcggactaRttttKaSttactWYt
+gBcaMMacRRgNtactttaaaSKtttcaYBaBttaVagtRtHcWaggaVccttNgtgagt
+catataWttYScMtWgVRgattWtaSggacggWWctBHatattataaKaagttactaMRa
+aataSRaDttDaaatataVHaatggaaBDgWgHtcKStVcatHtaatcatggBWaagHta
+gtMtgHcHtcatggggWcatacaHNHagcDatRcaaattcgcttgDggDNVcaacgSgtg
+gcaccttMttaatattVYtVgaagRttaBcagVaYaHcaRDBagatgaVHtNMtcttact
+DaggMgMaattRWDcctVtgagaaaaSKatHHttVDgtctgtcacatHNttgaatSaagt
+KBatatagacaaRVctcWtgtacKtaacHtgHataSgVtactaggtttatggBgtcaaaY
+aDgaaaaaatcgMtagaKaYatgaattatYcttKtacaatttgWttMaatBgaatSttMt
+NaVgVtScgcttctBHKgtaRcNBaatcDtacgattgacgtgctatNaaBtMgagNgKct
+tWcWKacactYgttVgNcgaattttcttgaaaaactacccctcgcNtgMctatcccacMc
+actcMatttatttagtagaacMNtttcttgYKaWtaaBtttcWttagHtgtttctcttgt
+ggctatgDgctaatWDataatttagaNcgcRRNataKtctaataHgaaMYctNaKWtact
+aacDtgaVcgagaactggtaccaactHgaggctagagHHagtMgKtaaactacaggMatg
+tYgSBaKaaaattMgatRtggggtHBVgttaattgKttaaRDacgMactcaaacStaaag
+ctctgtgccttcgtSagtSaRctacaataKatattctaVgtgtaattRacKagttattga
+MtaatgaNatacDataaggactttccNtStatatKaagaataKtatggtcctctatgagg
+ttaaDtgtattgataaaactggatcactKBtttggcgtcaaagaaaNtagtWKatctaaW
+BactDaBaYtacaWtaSgcaattattWgaaBgactgaKctatBRgtagttaBaRRgattt
+aagBHctStgtVYRtaaataaagtMWtcHgcattcacaaMWtcMccWttgVgcHaWttca
+NtgtVaggNgcVatKttataaWDcccctatgatVttttattacagRBBWttcttRaWgaa
+tBVgcgtHgWgaccagtYacaattgSttaaMcVtDatttaVttRgttKtcaYWatKtaaD
+tttWaYtaatYctSctatagtcctBtccMaMMtaMYHaSSgKaaacttctcBtMtgDtgt
+ttttagRcgtacttataHgKtNtMtKcBtaNKaHStgSagYHtataDtcKtagRtNWaac
+VgctVtRtttStNtgaaccttaVatgagaaggtcaKSttaDataagcYaSatNStcaatD
+NgttcgacaatttaSgaRaBNNacattRatNtgSttHVtgWHgtSHccaactKttYtatH
+YttVtgHcNgactMcaacttBatatgSgattttacgtatttgtggtScaacggYtHtgca
+tctatttttWtaSatcagaYatcgcagtgtgtMgtattctttcattaRatttStcaatat
+gcttDtStaaagaccDcVtaWNcHYtWMaMcgaacKcaNcttacctaBtgcDacatcaHK
+tRcDaaacataaRacNNtccDataNactttatBSDYatDtctBtaBatctDatKaMcatt
+MatatcDHctaagRgYVcatgttcgtgataHDYaagttSgHYctaaatgtaaaactNgta
+gaaactaattRaatcttttBKcgaatSctMaggVaVaaatgagataaataSgttKgtcat
+KaKatDYtaaaRttYaMtgctcSatRtagttttagcaaNtaKgatcgWYcacDgaatcaa
+tactgBgaNtaactaaWatatacaatacactaNatcaVaKaaMaaaaaatcaccBtgttg
+NctaacaBattttaaKWcaggataWMtaattgtaaHtgVtcgaHtScaHtctcHacVata
+gtaMcaaKtcccSagMYtWcaaatHHtaagRttDagtMtcYtttaaWWaaaVaRtcHNtc
+tcSttagcacaKttgtagtNgWYtatKDtcatttgaacctcKHtatccttattcttNggt
+BgtgtKaggWtYgtStgtVaRtaRaaagtagtgtcgcKtKagatgagYtttaatKcScct
+gaaaaaRaaHtttttaaaVgtatagKctaNtKaSVgttcgagacattttRSatagttSac
+ataMtaYHccacttttctatactagtatgaBaagctttaMtgaatgtcaKYtaaatatgg
+attataNcgBHatcctaRaaactgttgacttYaHtStcatcctDaMBttgtaWgagtaat
+WKataaaBgBattcttttctttaatWStaatacgNaagtWaMaaNgactMtgaaDaggaa
+aSctaSSgatatDttattatcatagBcaataVcHcRgcStaHaaatWagatHttMHacta
+RacttaYaaaaNtataHKVaataKtatgatcgtcVaaWgttYtVcaaYggctRWttaaKt
+RttDaKtgtatcaattWKaatBHaaaaNgaatggStHgVVgatMgBYtaRNgBDttMcNt
+ggaNgtcaHtgttDcNaggBtatYtacVaNttctcWtactHYcSctgtYtDtgWaatcHg
+atDatatcHtcttatattaaKaRYaDgaatgSYcgactgcRgaagttagtStYatYtttc
+cgacactacagKcaaagDttaatVatcttaaacRaDatRcBatKNtNtaaaHtcBgatKH
+cWStSRaKaSMgtaKaBacWgDDttgYaaYttaNtDgHtatSaSataaaaMBaaDtaMat
+DaagWtggaMtRcacttatggctNataaaaatatWNMtacctatgtcaYKaRacagttHD
+agccgtaaYcaatataatcatagggaaSatgMYBcKBBtaaRVRatRtccVtgtgaagVN
+ttcttagtgtcWataVggtaaNaatVgVaKctttNgtttagtaaagBatBtgaYSagHtt
+SYaacaStcgcagaSttcDBtKtttggtctacNttgNgKNNtcaaaaKWactgaaYgaYa
+ctatHtaWcaactgttSatNVtgtctSttYctgattVaatKgtaYcaaattSgttaStat
+ggtccaatgSWccaaactattgccgttacgcNatcHctctcaKatgtagtctattttaag
+gHRatcDaagSaVgaVNccaBKtacgtttStagKgtctaHtcattaYcctaVKtttaYaa
+atYtccgataaaVttcDgatWcgBtcctaatttNaattgctDYgtgatcaatttaagggc
+tctcatcKattgBtaBagcaYcKctctttNtaacHacNStggRtMatHHgtacatgcaMa
+gtgtccatRWttRKctaaaDtcMctttaNVgaNtcMatcacHcctgWtaaStcacgtctN
+aagRNNaagMaDtactDgctttttcatcYacttaKttatgcStDaStNaMgDtaacKtMt
+acctaaWattggtttNaaVHatgaaattaattacgVNaaWtggaWatctgVatcacYctc
+VHMtVaNacNtcccaWtttgcaacctcWctHaatcttWcaaaYaBaattSctYatctaag
+DgBttagtaSgaWtBcRcKtccYatatcKBgtctttatgaaHDcgNaMatggatgtWagR
+ctStagagaagaacagctWtNtataaaataRatHatKgctNactHgttRgRgVcRacatg
+HYaNttaHtattaNStaagatgtagaHcVctcYgggccYcaaaatgatcttctagctctH
+MaMMgcaVtgHgtaagaWHHtggtaactBcaMNNctagaacggWtctttgaggHcYNaaM
+HtaYcttKaagtSccgttgggNMStatacDttataaaVaYcKtcgcattttcgacctctc
+acVttNtttattgtcttctaVcatagaattMttgtHtMgacataaatagttctMtgtWgW
+ctttcaagYgcgtNaagcaaDaVHaaStMtaaagccccgtgVgtcacatcHVaDtgttBt
+BacBtcggYttDagaDYtccMttagcttacNcgaagatRtDataRtgctaatatatgRtW
+VttatWKtgcBgactcgagaSgtaaaaagttaaWaaagtatttctcWtatcBtcataacN
+cgctcRKaaDKactRaNtagtatBtgaaatttcgcDactttaNtYgagagaNttgaatta
+ataaaSMattRHNtYtgttgaDBRBttgWttagSatgacDggNVagRWcggctacDaYSg
+aaattHgtYaaagctccVtatacattaMctttgSgacatBKaattRgtaBRtttaactat
+tctagcMKMtttctgtgtgVgtctttcDcgtaaMtaggtaaaDtcaYtatccgattcYtg
+aaRttctKaNctaYgYaattYgRttWctWttaaaccaatcactVatgcgYttgaaatgat
+KBcNRgctcatgaccHagcgaaaatgtVgccatcaBSatKccRStSattaaatttggtaa
+gcVattctgVcattMtacatMgaaaaaataYNDtDaatcatWattcaggNcaccctcBtg
+cKcHagYtatBatgBttgtVttaYBgBgataaHNtacRtcaaBaKcagNtcagaatYgtt
+WgggaNDagtatagRtctcDtDaHScagttcYcatcSYacHcagagNgtgcHagtacagc
+tgRtatatMtaatRaWMHgaaKacaBRtagHtaaaNcVHcatWBgWaaacWccggtaaRc
+attgMgttaNgttVMVttgcaagagaatcaaaaaagYScKVtgccgacHgacgttcaMcc
+tcattatgcBttttaagtKatDactccgBatHYgttcatcgaaatctSaKaagaatWVtc
+gttgtcttaMaaYaSDtaaaataccgcKMtatgKtgScaaDMaaaactgtgagcVtttaR
+cttgtaNMatatatttggtMgYVatDaatttgctttaaRtaBgttaYaaagKtataMtWS
+tcHaaaaNacgctacMttDDgactacaNaatBcagtcattatatSttaVgRtWgSggcaa
+tSataVgSYgctBttataaYRRgaactgtgHtgacHWSactYNgtttBactatWStaNtc
+StcMttgattStacctgaattctWatNaaHgMatattcaaaKWaBaataatHKgaWgata
+YcaWMBtgtacKagaaaaagaattttWttDaMtggttgtgaNMtVtDcaacNttactatt
+acggKctatttaaaaBKatagttHaatggaatatYWgtaVtNaaYgataatMaccWagag
+atRttMtgKaMcgatattaacaagatgttBBcNaYattcNgtRttgaBcctaagaSMttc
+MtcctcYattcaNaRBttaatgVcMNgaacKagatcgNctaWVgttaaYRtgctSctaaa
+aNtttgctaaScttcVattaHtaaMacNgttNtKHMcctattttaRtttVtSgtacatBg
+tVaaSSaMVaRBcaSaRHtaWtWHttMtattVcaMtWaaaNaccccgHYtcatagaaRta
+aBaatttaBccaatcRctcatagWgcBHRtacaaDttcBgaHggcgctaHtgacagcSNa
+ttcctcgagaccBggtcaagWctgVcRDgVtaagtttaattatcMtgatNagYttHtYta
+gccRatagDtaatcNtaKtacaMSgDaaaatttgHaHtRDgtaattKtaMHgaBcaWtBN
+YaWgtttStttaSttgataatgactMKatHBtttaVcYatgggttttaDKcSatttMata
+tcagtYaBtgVacaatHcaDMcccgtaataatagDataatVaaagaagaVtctccgaRgt
+RtaatcgagtcacttgttSatgNDHaSNRcggtaSaagcSaBgWSgcatcaaWatgttac
+atgattcWacMtagtgNcacgatgatttttRcWttSgtaatMRRBaacNWRHaaBaattD
+aagStgatccttcaDacccctKaagScSSHaaYHWcHcaWcaaaMBataattgDtagccW
+tcRHataMNKtMgHaBcatcgaagtgtaRgtgggaVMatgttaWRtStBHactaaRaact
+NctcHaaaggcatgcVHKHgaatcSccttggSaWatWtNcaaBctaRagaaacacgcttc
+KatRattcWtgYDaaaaaaNatWtKgaacgtNttactgWHBaccaWacggttcaaVgaga
+aacVtMttatagaagtatWtaaaNHYaMacagWagtaatttgcatcttcgaatacggaHt
+aatVattctaDaHtRKRaNHcttacatcDKttMDKaWggDtaatcttYctcWtRaaaaKt
+aatcctgccccatgcgDtctaaVMtWRKKDctaatatDgactagWtaaaBcKcacMactM
+HHttgDataKHDaDttHttatttagtcaaVatccKWtacWtSVcaggtaatatDSatgcc
+tKtatDtttagacKaaaagcgtttaaSaaaYtgattgtKtgBMcKttgDaaaagttBRat
+HgcaKgDgtgcWataatMWgcVaVatcYgWttaDatcatNaVgtttgggcttgaHRDaWg
+atttctgMHgtVtgccttBtWtaatcgttcgKgRcaBaRMtaattWgctaatMaVBccaH
+tDagaBNaataRcacYcYcHcatBgaNtgaNgKHttctYaacaaaYgBttRNtNggaagc
+WtDggattgagtHaWttVacaaaBtgttaNctaatactKaMaaaaaDtaRatttDaaagN
+ttcYcaaactcMgaYgtacaaatMaaatYtcacVaacgaaDagatWgBgaataggtWtKa
+aMtgDttHtgagttaatttgVaaDagttNMataatttaSVattNaDtKVccaaatcgaYV
+taaaacKRaataatgaBDtctRtgVcttatttYtgaHgttBWatgaatatacSaacctSa
+tNNRccagtactKagaRtgSKMcgaaDattttagtHcKcaaagtggtataaaggctccta
+SatHtaMtRKattaNRcWtccgctataKggatWttaggtaatHDRatttattRWgcgatc
+ttagSgtcttactatgYgttYaVBtgcaYaaRtDaatacHHtDcttHgBgNcccataDta
+aaaatctNtacatatWaRMBgaattaaaacgctctctcaagtKcacNacgVRVcttttta
+acttgctcStatRScaRaMataNaKagtatcattRttNaVatcKgtacNatttttgaNcg
+acaaKctHWtgaKStacMaBatgWttNSacaaKcaDaatcWaKaccgYBggMScgaMcct
+agcaDatgtttcVatgtRBtKNWHtcctWDtatttttNNSaatattcMttgatKgNgaNB
+atcSggtctRcttttttatatggtNttDYNYgaaaKctcacacYHRgttacatacttYac
+aataNaagaaaagttataNaataSatacagttScacVaScaccSWtccagKHtaatcaaa
+tVacatWacgBctccaataHaaYtMtacKacHttttKtcataWWtgtgaatWaataaaaa
+catttcaccttaHtttgttccaatcccgRBaWgatKgagtttBaVgaNtaNVBgcaataa
+gaatagcaKRttgtatcaattaMtaacatataDBgtaaNttcaNcgagatYactggttat
+gtNVtaBNtDaaDtDttaSaWtactaVtHactttNttcttcatWttcDatKaacgtttgg
+VDaDtVagttatgtcagactKaatcaYtSgttttataaataDttKttKagacWgHgatat
+aaatcttagatNKtttWtWaaatattacSHaRgtttScttaatWttacgRRaaMactcat
+BacaccatRtttgaacctacttcDMggcVaSBagaatcttaKMagcaVtctDVataWtSg
+atagacttBctDtBNWgtgKatWctYgaaStccgVaaaDattYatagtatcaacBaWYct
+gaaatttaKVgYtStNtcaVggtggaNYgaRtMaacataSttcagacVactcaVaagtgg
+tattaaDBNDaagtatatMtactatatgatRSgtttgccaacgcacRMtacRYNataaga
+tcMgttgatcataaacttVcatatgWtacaaaWttggaaactttaScataactRattMtD
+acVYataaaagMaattttKtgaBttKcaacatattVtagtcatgactcgDaacDtaWcta
+tRttSSYNtgWaScaaataagaaatKtagacataatggNaatttcSKtVWtgacagKWat
+tcgVatttcKWgagcaWgNKaaaatatgtaaacgttcactaaWgacaccBNaacagaaSt
+ctgctaHcVtttMtcYttStagYcgtttBcRtaYacttgNaacMtDRtagcatgtgcgag
+cScaMgtaatBaKataactMttttattaRcattattatacgtaagSNatVRgcttcgaVa
+acHNtctaHBKYgKaccYcttagagcccaVgatttgttagactaaacgtgcaBgccaWga
+VataggattDBWaattttgtBacWtttttaatDtMgaactaagcVtctcagBMKatgatt
+gaNaVttggatDaSaBatttcgccatatgctaattgYacatgatccacaaMHtttcKYKa
+WtYcgDtNaaDccgNaNcacacHKttDtttaggctagRVtYgtaactagctttcacaaat
+YtHaattYacaattaMSagMactcctcatgtScttcaaYtataaaaScHYaKcaYacact
+VcacataNtaBcaRatgYagVBatttgtaactttgRggacaagcVacctattacRcaaMa
+cHRagagtaVNctacagtgagacgaaaggKttacattgggacaataKNtattcaagWKtt
+gatNagNtgctaNgagatNacSatctNatttatctatRgaaaatKatNKSBcKactatac
+StcagtaggtVtcaaaBYYgctattKtWNttcRacaaaNatgaacttaRtaaDSttVBYt
+aatccagtNaaacRttagaaccRBatataWaatKctcattcSacWaacaacactDttVtt
+gacYaagagtaSgcMttBttaVNgRVagKDcttcttcNtaggttgcgacYacttaaggVH
+caagDagaagataaVaatctgtatRatDtKaaSDgattcaattYtcatgYgtgaVMtMaa
+ctaagaatgRgDtHttaaccaatStaaaaMctVDDtgttatcttaBBgccNacKMaHggc
+BMttctgNctHggagaataYMgtaMccaataattHttYttKggtKaccaactcccHtMSa
+atNactcRtttcatgcKcatgcacttcatSaatatactttVtaYttDattgWcctcactc
+YccattaDDaHaaKcaatSttagKtWtcatRcaactattaattYaDggKtagtNcgSgtt
+tKRgtDWtVHtDNcHWNtKtccgtctagtatSctaBcacgcaBtaacatgagatVtttaa
+ggcaVttBttaStWtattgYaggtSatBMBDactVtggttDagacataaactactBgcac
+aacMaagaStccaWNaaSYMYtgtaKaMcYSaHaaaatatttMgtcaaDScaKtcaBVta
+MVMRRDMtcttRBgWctaacttgaacNaatgttWgtggBtRttHVKgKcHVtatattSaa
+aatBttcBtttcDgHccBagtRBRttaVagBctRcaagcattacKccaWVWtaVcggtta
+tNaSgccgKtYcBaagcWgcatgaNHaKtagNgcHcgtgtcataaaatagagacttgHYa
+tattctaBgtttatRatctatttagacattttNtWaaSagtaHatRtctcggatttatgt
+gatBtctRggggcatWctaSVMaRtcatgKattgRcatMaHaataNcBcDcaggcactat
+tHBgaatStatattcatBgMVataaSacVacKHatggttaaBKtgtaSaWMattttMacK
+tgaaWaaWgctgRatgtgDacBtSaHtDgtgtMVttagatgattagagaSttgattgtSa
+aacagHaaatacaRcaccBtaaDtcaMtKaaStttatKagaataaNcaaBtattKaVNaW
+aNactagtYattaaagWgHttaMcKaSagatSactctatMSagtggaYctcacKKgaSMg
+cRgKtgccagNMataatccaVgatcttHagttttcttaaccataggggcttaDtYatcga
+aaMataagcaaatBttgHHcHagacagagaggcacWtacccMttacgtgNttattYctVa
+aactgttaagtKatMagttcacaaagggatgaVNMatgcaSattatcKagtHaBtgaagB
+cggagtWttVaaDaccMScactgVatccaRaSatattNtgcBatgBaaNgtcaBMgggaa
+tgagtatRgaatgtNttacaggcttaHaataaHSagatagtgVctattaaagggaagDWV
+ccatcKaaaatRccccaSVaaatttMtatStgtWagtStMaaatBctgcctKWgttDDaS
+KactctaaVRtaSWcVactggaaaaNMaaaccgcacNtaVgaagcttDNgaDBtaMaMKN
+tKccaVtgctcttMMYaaaaHaattcWgHcgtacatWaMaaKtaataccgBDaYRaggat
+atSKcScYagMtaatKHMtaaccatgHgtagDaggtgtaaatatagaKVgccRYctcRaK
+BKWtgatHYcaHgBaYtttMcatataatgaDttcatttaStgtcVSgacggtggVgtBtg
+acatgtaaSgtBgatKtKtaYcatVtNattataaaHaSccHaaagctSMKattcatagca
+cagtgBRataacaatMttKcWaaaaatagStcggRttaattatWaataatMaYagatgVt
+atccttttHaScgtBgagWcatgBtgcctatcgtaaWHacagtactgaattaaaaaNatt
+RNMaSSNSctattcaaagccVVcatattttagMcgtattNtVBactacScattgKVtata
+aKtttgNaWcttNacctagtgaNaaDcagtaWgKggaaKtacgcaaaYttatacSttgYa
+YttcDNagggttVDagHatSgtacYVatataVattataSataacgKgatVtVacHYRWtt
+atcctaaDtgtaaDgRDttttattWtaaDttggatcattNgtVaaaVggaaggcYgSWaa
+attcWHcgaSaVWaMatctMDtHBgttttaatctaWaagatatDKtVttaccgaMatRaa
+aBttaNagHatDHWcDtBVttaatKtMataYttSRHHcgtaHDtggttccaaagRRtaWt
+VctRcaNDttatacgatMcaatNHtacgaattBaatHtcccatctctccBtgtataYcta
+tgtcgaaDYWtNggatNcacRtMaatNtKcttSYSctaDaaaggctDaStatKtataBgc
+VaatttggYcttaaatgatgtHctaaccaactttgggttcMaaDattatKtVacgVcSca
+actSataSccHttYctttgtggcDtMcactaNSBtMRBMaggttWKtattaatgtKHact
+tcaMVatctgttgtccaaYNtaagttKaacttctHcgcWtYttatMBgBaMacaattaDa
+actNaaatSatcVtSSgatctatgNatSYaattRatgcDgtctataagagaagRgatatt
+tcccaataHgttttWKtgaagNRtctaaBtWcHHcDgaattgaaaKtgttaaRtatgtaM
+aggDttcMaccaMaattDctgYctaWtStaNtgRKaBtNcMHcSttMtaKccYacgNNct
+ttatStgVtaYtaagttaagaBHaaStVKHatgttRVWtataMtSatgcaattcMcttat
+KgMcagtgaatcYtcctNaYcttactttctcttcatggcgNcatScStBtagctWtHaaW
+attaccgtctcgtBMcaaacKctcccaacttBgtWStVttMRgKcVagHttVtaagMaNa
+tcaHttacatcYKttDBtatgSattVcgBcBVYttHNtcatKgcYgaaSaKtatttttMt
+ctatctaSaattDttcWagHSacgttagYgacWaSaDKatcNgctaatgVSctgctYgaK
+gKtaataggtggagcgtcgaaaaRYtgYWYSaatacBgacWtaNStcaattWtRctttta
+aSYgttcNgtBWWgtgaatHttttBaMcMtKccagtattttcgaHaDtSVgatgaacatg
+cacgtcagagDYattBcagDctcttNcNtaaaatRctgMcDacaagtttagtcaaSSaag
+aaacatacaDtctctYgcaaacBcaagaBatgtattgacgagYacBDgttcgtgRtaMga
+attttcNtgVcttctgtctagtgtccatatctgatYatNtatVWgttacaDacaHDDagW
+tgataWtatcaaBRatDRtMgVcgaaattcSMagYgWacgggtaacaaattcagcatagS
+gttactBctgSVWatYcYgcBWgggRcHtataSaattBcagHgcgcctttKcttWaggct
+ttaaDtRacBactaaVaaKtaaacctcgcgccattactKactKSDcgacaVtatatagga
+taKctcgSatgHSatVcgtagtgaBtSYtgaBataatStaaccaagttcaDtHtatatta
+acYatattatcctacgagatcaccgtVSttctYgtcataaVactcgWtaVatttgttgga
+ctaaaVcaSaDtYcgNtYtctVaMtaattatWRtWcaNtaKcaaYggatgNgaatcaatc
+RtcgagtHcgVgttataHDcatttaagttctHtcgMRHtaaagaVactBMtatgaagtaa
+aaaBNtataaNttcKcctaNttaaDtcgMacgDcaMatttgYtaaNtcaccgatgagMtg
+ttaggWcacHttNgtcttHYMcaattKcagttcNcaaaacgNaaSattgKttaaBaKtta
+tttaMggHcttttaaRNVgttaYttttMVRtYVgRatKcgVtacgaatttccBatBgYBR
+tSKKctaaaatgatatgBtcttcgtttgacHagtaattatatctgDtBttatgaDtatKt
+cKRcRttagattattagHgDNaaaKgcgMtHtttKtDtgaaaagtaMatcagaaccgaat
+KgtatatVaccRaKYtDHtcSagtBgtgccWaaaggtYKcaHatDDaaattDStDtcKgg
+tMgcMtgtHtcaaVcgtttNtagtNtgKgctaDcScgBcWSatgtatagcKgWgttgaac
+gagtgcgcgtKaaaacgRtttccatatatttttMgaKagcVcVRataccWctctcgBcga
+ggcgttaatgaHYtttHtaSWtagcagtttKtYaacaaataMtaNDatRgMBaBacSaat
+aSDctgaactattgataaRtaVtttHatWaacWtVaHaaBDtactYtaDactttSgtKtR
+attgatttatatattattataattBatagattctaacDcRMaaggttcgtcatattRVYc
+ttKgtRcgWaatcgaaWWatDctacaaaagaattHaatctgttttacYatKatBaccMaM
+aaVtcacStaaYgYKgtttctcattatattNgSaaHtgRaBtcataKYtHtacttgtaca
+aaDtYtgatagNRcYatgaStaaagactgtcWDtYaatVaNStagaaaWtaaaataDYtc
+aMatSVBVaaaYagaaaattgtgcDagWSaStattttaatNcacgataNBtaattggaat
+gcMgacattHaattctctaaMatactaBaaattacaHWgBNtNaaSattttaacHtgtag
+tBtcRtttSaNNaYaMaDtatDtagaKggYgcaaSttgctactDcNRtWgtttaVtggca
+aactattgSgaagtattatgDgcgtgtcttagcNtRctKggtMaHgaDaaagtactgtcg
+atttagatcagNggtaattaKaatgaaYaaHaattggttVaaMggatactctaBgtYHMc
+ttccVcaaWtgttHHRgagttKaaagaBtaRtaaWaggttctatRatSgtatcYtaWcat
+gtaBtcaatctaatRgaYYtWtccattataBacttWtcctaHaaaaggttgacgtRattK
+gaagcattSBtttctaNcSctSStNtYtWaWtgtagtcttgtctttaagNKgaagacgDa
+RgtNaBaVDgaattggaYtaccSVYKctSKKcatagttgSttatcStactcaatSMataH
+caKgatWVYtNacagtttBtRagYHaagtaNaaVVDgatattMaagattagcatcctaMa
+aMctgNtMcSaRcgctHMttaattDtttYttcgataaagtMtaagttaWaaDcaatccKg
+tgMMcatBgtRtaHBcttgtBaBggcaDcgaWttgggtaDaggtgatRtYaMWDttatcN
+tVcttRaKagctRgtgcNaatctgattatagattagtatatgaataDNatcYaggKRaca
+atcaHcaagttagtKgRatRgttaagaaaatacVctaaaagtgtaagKVgcttSWaaHat
+agHctagtDgDtSaVtgatcatttaNKgKHataKBctatatWaNgtttgcRaVNttaDgt
+cttagHYKatYaVaBtaatgaBattaYcNtgcaBtHaacttVtccatDagVaaaYgWtND
+BgacagVgctcaRtaHaaacttttacaaggaSRaaatagaagaatacccVaHatcBRtct
+tttaaDMHWtHgacMtctcaagKDttctgYctctcNagaMgcgaaDWatMcMatatttDc
+tttactaVSctagttcaRKWgtttKRaVaaKtacaacaKttatttttggcctataaDgtc
+BctBDgcYYaatNactcaaRgaRWcgattgVNcWaatctgKagDMgctatKttRatcatt
+MaagtctaRaVaattKctgaKtatccgaaRatcHMaaaaaagattccacgtacgaDStat
+atctcataggtacgcgatgtgaaggtHYtatWagKVKgaMDcaatttWccttgKgagtct
+agatgaatgVRcctaMttgtaRaaYtRtaacWgaaaMttatcatNcgttactaaggtDaa
+ggcagtRctcatcaatggYagccagcgaatatagtgttWtaccaRctagatttDtaaatR
+cDKtccHtBWgttctWaagccYBSgtggaaagHNttHtctaaattaBatggaDMgaBgat
+atcaatactcMtaaKtcYccgatDaYgHDBaagBattWattgatttttaagaRaaggatg
+gYggaKttaKtBVBcttaWcttBtacctYaNYttgctgtBaaMtWtcWaagtaaggWcgM
+DaaNtccWMWtatcMVgaSaRctaKtBgKWDacDgaaaaNgttcaaaaataMcttaWtat
+gNaVaaRataWtgKctRatataagtgttgacgaKgaNgtaHattaaRagSgattctatgt
+YtcaattagBYBatccYtgtNacHagHtacVcVacaacaccgNgBtataYaatWHSttat
+tgctDacttgtgHgHcMcHacagctRSDtgattaggaDHtYagatggagWtaMatcRccc
+acRaaaYagcagatgatacatatttVBBcaaMtctctaWgaNtttcctaVcttaYBDBct
+RgSaagcNgatttcacgtcRDaVBttaRaggtaaggHcacttccgDBKgagaatttataa
+aMaRattagcVgtttacaaagagaaaMtgDtttYttggcttataKaStacaVttBttctt
+gBcVaataaagagtgagBgcgNcNattgaaacRcactDaaccaatWMtaaHtBgaaacaa
+ccctcMctcaaatctMWttggttttacttagcRtttacatRtccBttVcatgaaBacaYg
+agHttatWDtcctSatRtYggHtNMttRgNtgcatcacgacagaHgtYaSaactgaaNWV
+agtagttagaNgatctgcatWYaDacataHtaWttaatHaDgactYgttcaSVtttacct
+aatttaDgRcagacaDtgcYVttaagaSSKBYtgHtDtNtcgtcWttDtgtcNtgacKag
+cactccDMacDNcccctWataRKcaaatttctRVaacagcaMtataaattWBctttgKgV
+catttaVgtDgtatHtgtaSctagtatagcBtBtgtatgtcgcMcgagttctacgaaBgW
+ccgaWatgcaRtWtaagYttaNtcWaHtgattYDatWRgRWagtRcHggNatNttWaaac
+aSgcaatMatgacNgggaSatgatttcBHcctaaggWactacagaaaagctMcaaagaYt
+HVgtaaHKgKattVaWtttcctaWgaKattatgMaattBgaaagtgaSaaaWtSNBtttY
+ataVgNatgaSgcBaaccatattcctctagRtattatctttctMtgaRtctcYgaatDtR
+cHgcRVtWtaacDtcacYatRcttNgcgaDtVctWtacHtatatgtatKaaggtaNcata
+KRaataacacDctcctWgtSaWcatcDgatatBtaatHSNBtcaataaStHtacttaYaD
+aMtaagMtgNaaaaNccccgYWHaatgcBcttaBcgtMBKggccaVgacaWgaaaaaVYc
+RKctMgcaccWctcSacttcVtacgaagtYtcctttttaYgttattaataactSttRggt
+cVgagWRStatKataYcaatNMtacttcgcttVBaYRaKttaaYatacagctBgagcttc
+HcaatBaaaVcgctcacaMgttaHaggctaDtSgatattggggBgRMagtaattggattg
+YYHtVtcttSRYaacttataBtNKgatVaWSDWacatVcttgttgaagScaDaSttcact
+aattagatKttaMcHtMgKccaYatKataMcKNgattgtYtaaRHHcaWagctgtgcYat
+MHaatRDgtgttYctatNKtSDtaKgcBttgagtKtacatgaaggcgMatDaWtcBatag
+taaaatNYtSVgVatttcaNgRtaRaaNBttggaatVgaaaaagaaggtgNtttVBgcct
+tgtgaBtgMgtaaacBgtactWgtaacctatatggaSYattYtVgtttaagccaRtatRM
+cgWMgDVSNgataatBRccNagagStHttBgctaBagatattaacaagaggttttcDaRa
+gtcDgtHttcataagaacaKBttaBgactaRatgaaDYHttgVagcMcBDgYactWgSga
+cBataMMcttSaRHgcagKcgaaYaDgttcataYKcttcMWttattaaBacDcttDtttB
+catVggttVHtgtMgKcgaaVgtcgMaaHHYBMaHtaaKaDttaNgNtttttaggMcWtt
+NaaaDaaaaactRgaatagSVHtaataagttStccaatcHataatacMcattHtacaatt
+tctgatggacatatgcaaacaKBatgcagacagVcctccgcaacNatcMaHtcMtaSctg
+taYgtStcBtcatDacRggttRgagaaHatVcttYWgaDtatgYcaBKgtSWVYtttctW
+ttHtctaYttttaBtcataaNgtBRaNcgttKgtgVKgggVtWatcWagttSttttttaM
+aRWtccgttttattaHatttBVtataSctRWtgcMacaattaStBcacggaatRatactV
+gaagMaaagWacaMgctaacaHctHtaatacacgaYagtcttKagcDttaKBHccgtaHa
+acaKVtcMKcaataaaNaggttSaatcatgaNaaBtacggBcaagatcRgttttHaNgtK
+ctYatBHHtaaaDNHtaVtVagttVacKtcYgcattcatacaaagtaacKaKKtaaNtNa
+taaNaaSaBtagaattctgacacNtaHtataBDttBctataatagYSctgtaHcgccgaM
+BaggttaMHtKgttactaaHaacgDatataaagcaWtgaMtttgVatcKaattcgHVNat
+NgDaaYtataHacaaacaagagtatatDStgcNgcRtaaWVVaDStNgtcaaacgDttaa
+ggNttWcaVNaccctgaaaMcagVYVaMtBgtatacSacgSgNtaaaDtRaBSaWcNacg
+YaggtcaYtattagVStaccgatgSStMattctWtattHtHaDtatgYaatattgtttta
+NggttVatcttRcgaNtHaVaStgaagactcacaaatcactgataaKBtNHtttctWWta
+ttgactacNtaWatataaaBaatBttgggtatYtttYtgttttVttgagtcVaMVgaatN
+taaNgKMaacgtaatattKWggcagtgRttgtgacactaaYacactggaaKaWYRgcatg
+cgttctBcttggtVaaWgtttHagtcaatctcggaNWtaatBNcaMVKStaNcMtgatat
+aatDYMctttcgcatgcYtHtVNgStggagcBtggMgccctgtgNtVatactgcctcHca
+taDBtaStgNcagaYttaMtcaYtgtagatDaagaHaaaRcRataattcaDtcaDgttgt
+atRaaaaYaRgtttDBgDcgaagcNttgcVttcacttaMgtMWaYaattcggaDcgaVtY
+attaBYaaaattaHVttttWaacDttaRaSWactcBgaRctacaVStBaaatRgaacMSa
+agaatagYtNctcaatagctNttaVtgctgtttgYcttaatgtgMaStactgDBagVSgg
+tSKMYttDatgtMaaSaVtccSRMgaaaactHaatWWtcatttctDgcMcggVtgtRtca
+tctttNatcaatatYaKaaaatKWtDDDaaactaagtacRHtcKttacaataggttWctt
+ataSaYctgctVtaaVggatcctaHVttgWtgHtWttaDHaNgaccctatatgcWtNtta
+cctaYtttDWtttaggHNgccatattacKggattVatatcRcggRWMtgcaVRaaHgtaa
+taattttaggtctcDccaatatgSaaaagatDtaaVtYgNaHBtcaYttaaaaacagata
+taaagttaaaDWccMHMattggtaaagtccgaKtatDKaVHaBagaBatactataVttDt
+tDaMagctctaaDSggtttgaDacacVatcttNtgatKtVaBStatgNtgDKYcaatcat
+aWtcNatYccgRtcgBHacaBaatagaVtagcttgaKagcgHtttDNtgaagMttStttt
+gDDKRWtagtaBgtgagtgBcaDtWtaHcctatHatttgttWgagcggDtgtRDRcaaat
+agcacacRtDgtgVaWtaattRacVataBWacSYWVctgYtWDaVtaKataaacttKaaa
+MVHaaaaKNtaaacttgVataaaatMaaatMaagtatcaaRtatSYRtBtaataattgtt
+tgaWtaNNtctcaatNaataaaaaaattgaaaattattgtgttaaYatccccHtaNcatt
+cacttttaMgVDtaDMtcaWSgYWcSYtSgaatHtgctagaVattaBtaaaYgatattcg
+aaBtgaaDacacatRaagcgggagggDMtatDttaatttggaKSNtactRMttactgtBg
+gcgtcatNttctattaVacgttccKtVttMacttWtctaYcacgtaVtaaRgKcttggat
+SYatattttgttacaaMgtgagagaSatattWcagDttggNtNaaYtaggaaKtYHcttg
+KattWagNgtaagHHVatYatcattaaaaaYtHgttcaaaataattatBgcaKWKtagaa
+tagtatBagaaMtattMagaMtHcWgYcacgttagtgtDNggctatNatRcYYHtaacMa
+SStattRagRcgataaaatWNNatgaaatttVtKcRtKtDtaaMcctccaDRcaHtBSWc
+YtaKttcacaaMaataaMaactccgSgtYattDtaWctagatBtaatSgatgatHKgttg
+caaaaagaScHtgaaHRDatSagatcBcggcatcatYVaatgMaatStgNgWaaaaMttg
+cYaaagttSHaYgaaatHattBgtaaMRagSaSacBaagtttttcatgttaaYcagYtgK
+tYctaStcaagcgtaVattaNatWtHgtHKNDtcNaKaVaStSacaaStttagaaataat
+gcDSatgtaKtgMMtcaaagtNattacMYgtgctNgVcaaNcDtaaaVtYggtaaaactg
+caagaWNcaaacctDSaaSgVaKtctcatataMtggBtaRttKtagRcctgttaHgWRaa
+ttgDaaatttHtaccagctcagaccKaaBctaagtatWtaVagBgtttatgaHaaggatt
+StaactWacKDVtMHccgtacaMWYctDtagatttRctaccRagtWcWgaaaaMcagttc
+tgacSctaaaactgaatcacaNcaMWtWccYgtttNaatttggttaaNtggttSattttc
+aacgYVccMtcgaactBtatcYttcYDVMttcgattaKWtatttagcaatatcagWatgc
+RVaatgRtacWaVVBttggatRtaNgRagttDYataacDVBcaaactttgtttgaccata
+gHMtRctaWcgacagtgcVcaaVgRgtaagtRaaaattSBKacBaatcagaatgtHattc
+aVRtatVSSaKatNataWRVaaagMaacataDgataWHatcNYcMtatttggaSatttcH
+cgacaYcaKaaatattacHcSaBVatHacactaMDataaaggcacaacaSacctgtaaRg
+tcccaaaatWtDtagtcaagNtttgatDacDgcagaDcWgatDaaKagctDWtttatatW
+gDcaaaWttStDtKtatSagVgaaKtaacgaccgMgaSaatRRcagYtgttNDggcHSca
+aYDWtcaacgtaHgaStKtgMtRtaatccagtDaaacHgtacaaccHtagataNaattat
+cVtgaKaaNaaaaaaaagttgMgtcRaNaacagtaKcaBgtttgaMDgDMacttattatg
+aDgagcgtcacaaRaagtYaggMtaaactagaacagVaMWataggtatHagtttaaHtca
+gtaaatgRgcatgRctgaMttBaaataagWVtcHctgtgtYaaaaVtKtaSaaBatMttt
+gttatattattcaaBYctBWtggatBtgaggDagtgcacVataRBctaBaaaataatttt
+tNggtccgtVaaaaataaattBHaatBaagaHgttaagcctaatcaaatgaYtKaatYta
+aggtMgaRggtWgggNactaacgaRaaattSttWtaataaVtHgtacttNtaagHaSacg
+WggaYggNStcctgacgDcgHggtttHggtNtMtttDatNDgtgacgtatacgatKatat
+aaacaattSaaagcagatKtttSagcaaMttttgaKtMtagtcRacctKSttBttaatMt
+gcgttacaaagaVaataattcaSaaWcBVacYKtacaNBaaKRtRtcgWtWBaRKVtYWW
+WgattgBctaaatKaattaYtMtSBMBHDtBtaggDtcNctWYagtgSaaBaVtcttNgt
+cgttHtgtMtctatKtatVggKaSaagtttattttatgtactactHtHttSMactatHca
+agaattVataaaMKNtaMccgtgatDaHcaacttRataacaNgaatcSBtatgacBcctc
+gggtaatWaaWtacacaattctRVgattctatgtgtatHagatagggacVaattttDtNa
+WKagtatatHtagacgaggtatgtcagtgagHccccaatNataKMBaHtcWgctagtgHa
+atBatSataDatatcacccaagattttcSatKgatWtgaagtcBMataaHaaMaattatg
+cttWWtttcgVKYNBattggtacttcaaMaVNcctcHatcgctVcttKatgtctctBMgg
+acatcaggacSgaKttgagtctKVYaaagtaaSgaaaHaWactgRattaaBttVaHtgga
+ttagRWtaaDaaatgatttSMBWMaDactScgRYtgaVagNctgtSBataKacStHRatc
+tVgBKaggccaRctaacttcYKtcaDcttgaaacBBataatacYMgWgctgtacttttat
+gaSaaatYcccgattattRStccaaaBagaacaaaVtttgcttatagaaacacScccSaN
+taaaaBgtaaggcDgtSttRatMYSWatcgtaacgtStBagttaVaaaScccSggaMDBS
+gcaaKaggatatacgtatgcWactccgVctNttMaYtaaatKaaatgKStaaaHaKatat
+gBtcctatgtVaBggaatBcgcaatgagtatHcYagctDgtWaaccagtatWWtaRtKag
+atagtgKatatgaaaggcaWgtNKaaagataWaatHaaaaaKMaaatttBtatHtctNac
+tKtBVVagtatcacgtMgtgttaKtaatcgaaMHtYKNcMaatgcaSaaDBaaaaagaWa
+DtWMgaacatttDcatttaBaBtDttaaSMtcagcttttRWWaataattcNctactWaat
+NaBaattaagaaacttYRHaccatatKtaKcNVgttYagttBtaaaaVtctcgVctagct
+cgSVatatagVtMcaaHRctaHStttNtcattRaatgtaRtgttaatYtaagcattgaat
+ttaKtctaKKgaaggtcgMctttcWaagcgWaKcttcYttgtgaRaagMtDatgWgYaat
+aKaatSWScatKBtYgtaagagaVcacgctHStaacaSgBtgtaNRYaaWtWcKgaccDt
+gaWtgagMaYgVVgBaRacYtcKgatcagttgtaKcgttgagNaStctggaatVtactaS
+NtaaagtaatcaattaaVaaDattHDBaHKDHctVggcaaacccKMaatVtgttacBcct
+StgBgMtScgaaHcatgctMtStaVttttcDaNagtDVaatYcggaDaYtaactaNgtcc
+aattSacaaaaRgtagaaKgtcRSNtgatBacccttMtactatKgtaaRMagataMatgV
+tVKagaRagtcagMgMaatRHNttagaagaatgggaatcHtttttSgtNgYatgtgcYta
+atgDctMaaaMccVScgcRgKNaaagtaMtacaKaMNaBatagBttttcttttYatataN
+aWcagatttgMtgaaacaBYtHaaatgtaDactatttNatttKttSattgBatSRtgKHt
+tacgattgcggtaaaaacHHtaNgMcgHaVDtgtagaagatBaaagDttaacSatttaat
+ttaccagatataattggVgaRctRtcgccVatRNtDgcagBcVaHtBaatDttatgKRKa
+gataaRgcagtaKgagttatatcaMSagttccRcttaaatgatcttataaacaaatttcc
+cttaBaWtagtagttMaacMaKaaaagHatYKactttRatgtctcgattBcSagaDKttt
+HtBaccttNttVttVVtggttacgtaaBMRgatcgtctacaaNBtaVggttYaaggattc
+caNgRgtagBtgtaBacaagtataaatBaaatKRtaMtKHgatcgYggDSgKRaSttHSt
+catgtatatWacacRacHcatYtttaacYatatgtgttNtgcSagDHgataYttNattat
+cVattcaaYttggtaRHtWtcgaBacgtttaBaccaBaatgtcgcNagaNtKtaDtgDta
+tgDaBtcKgtBgatacNaccDDatttYtKggMtYNtaactgVacattaaHgMttatcgtH
+MNtataBtKSgccaVttaBcttattcBaagtgaWtaRtcctDVRatgaattgatatgaWg
+ccacDaatKaHtttacatNttaWNWgtacaggctacttBaYaaatatacaaaatttcgNH
+gMgttHctcKYcttgMtaacBaDVtaatttacagaRttttttagcKagtKactatMRtgt
+DtaattccRcaaKSttagttttBtctatagaKaVttttgcNagtKVccttagRgWaNaKW
+ttataDgcgaatgMKatgatRcYtctgVagaccgcgVgactagaWaaHNtcRNRKaatac
+tcYaNtSDKtcVVggNgDagtttaaKRgttaDcgtNNgtcaYttggtttYtatgtaaagg
+attttagatattKMcatgYaaatcaVactcagagtRYtgtaactatagtBaDtVaWatDa
+tctataaaSgggtactaYaKKWagaaaaataaattatagRcaaaVataVagatatgtagg
+cWagacRWattctgacgcDtaBcYattgtaDggMatgagcgagaggctaaatVtctcagR
+agDtSgKNcgtVcStacatttagNtgatSNgatcYVtHattHtBgMacRaattaHBacRc
+NaaccctVaaYaattcVccatacKcttSagtctgKMNagRaNcatNgcgHattStSKYRg
+gtcagtcaccattttagtMaccctggVattHaatVagaaMaattaVacatacacaaatta
+attacgtKtagaaaMgatWgWccatYtagacKatctKatMcggYcgcatgHRtcStVtaa
+tHgSaaaVagtgaatgtgYtattaYcRagatgatcataacacSgaYaactMKttatRcga
+ataaMSatacNgaMatttcggccacgaYYMcaKattRagDtRtatMVBtaattWtMHgNa
+WDgStaaSNggStcBcVYtaYagaHtacagttccMcgtYtYttcattgSWcttagttcgt
+HtgVRYgaMacttBtatcaactaaaaVtDgataaDgtatcatYDttaStgccBacctaaB
+agttgRtaSBtaaaagWgcacBggttagcMaYatttBgtaggtRBaSagttcacgtaDaY
+aaaacDSaKattctgtSatatgtatggVBcctctgtgaaHDKgttaRttttBMHgRMgHa
+gtagMgacgaagttaatattgRtHtHttatYaaagcagatgtgattagtggcactactVa
+ttagatctctgtttatcattYttgatHcHttagStgatgactctDaaatcagtgttgttt
+ttcYaaagtatatcYcaSaacaVttcgWtatKaaaHWtRgtttaKacttctgaaNaYacc
+tNtcStatttaaagttKgtgatcctBcaBtctttaaaKagttgDtWctDtgtgctataKa
+gtaNHatctagYgatcMgtggYaagactgacacttaRaaccHgttcaYtagWtggtgBcS
+tacaMcMHataaaNagatactccaggagttaatcatRttttgaKNgSgcaggtgttRaYc
+aaataBtaDtatHgBtatacKaataKtaggaaatatgcataaHgaKttttatMaaaNgMa
+tYattgaatNtatVaggtKctttHattcatttatYtattagtataYtttagYcattagaa
+ataHtaaccttactcatYttHMRagttctDagNSVgcgVaNNattctVcaaVagaattta
+agaggttttacRagtagtaaaBaBaaMtaScKgVaRcNtctgtataagtatVgtDgHaYt
+tcHYttaagatRgtgaattctYaaaattRtcWtacDDaRatcaKtaSacaagctaNttRY
+agMSDKtWgWaYNgaaaatatNtaatatHMtMWRaRacaaaatgctgctacNKaKtagtt
+gVatDaVccatSDtgaSggcgWatccBgaaVtgtaWttagatVaBWtacgWtaYattaaa
+tMctDgDaaKatttgaaatgctWctttaHtggHaBBSRVBWtgattgagatccNcaaaHt
+>THREE Homo sapiens frequency
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta
+gagatacctttgcaatttttcgatgaaggcgaccgagataaatgagctataacactgtat
+gtcttttgattgctataaaacacagaaacggatattaatttaggccgtaaccaacatctg
+ttatttgacatagaacagatggtcctttacagcgtattccggccttaatattgaggtcca
+gtgtattgtcctcctttaaagaagttgattgtaactgacttaaataagacatgtcaccca
+ttcactgggttgcaactgctggccctttttgtccatcgcacgctaatgtgataacagtac
+cgccctcacacctgcgtttaaaagacataaatgtcgctatgaaggttattcattaatttt
+agctgttttcttagaaaaggtaaatttaaaattgaaaaggctagaaaactaaagttacga
+caaatgtgtttgtcaagtaggcgggcatcattgagattgtaagaaataaagccataacca
+gccccggaatagaaaatgttaaggaaaggcgatcttctttgaattcttattgtcaagtgc
+agtcatacgttcttatcagaggacattgcaataaaatctaacaccctcccttgtgtggtt
+gggccatttgtacttcgaagcgtccaccatgtgcagaggataacggaatgtggttccgtc
+ccataaacgatcattctcgcccacttagtggcgcggtaaatcgctctcatagaggtaact
+ggcctgtaatgtccaatgttaggctaccttctccaactttagtacaacgaataatgtccg
+attaacaaggagtcaatttgtcatgaccagttcattcaggtacttgtatctatacggacg
+cgttccagagtagtatttgaaattttgaggttctactgataagtttagctatcgctgtat
+gtctgaataagaatttaatgtttatcttcgataaataacaattaacaactcctaggtgat
+acactgtgaagtctgctgttccccaaattacatatgctattttgttcacataccatgaag
+ttaagctaagtgctctataatggcataaacggttatcaaactagctcgaatttcttttat
+tacgccggaagcggattaactgctgtagatcaaacacgttaggatagtgtcgttttcata
+tatatctaaattcggtctaacatgcattacccatgcttgataacgtagcacttcgcagtc
+taattatgtaatgtccgtttaaccaaactttaaaaaagtttatctatcaccagtgatgcc
+tcatcgtgactacccggatctttagcctttagggtctaaacagaactaatattactacgt
+gtcatactccggagcttaaccaggtgaaacttatttgttaaccaaatttagtgacagggt
+agaaatacgtatcaaattaacccagcaatacaataagcatgaaaataattgtaatcgggt
+ttgggccggaatcccgcttggcgaaaacttaatgacatagtgtgatgcattttgcactgg
+attgagccacaaactcaactagcattatgctcaatatttggccagtgttctacggtttga
+aatttataaaggccgcgcaaaagtcttgtagttacaaacgcataaatctcgaacgtaata
+ggtttaattagaacatccgtaggatttctgtttatagtagatttatactaaatgttctga
+ttagattctgacggccttacccatacaattaataaagacgaatatattagttatagttta
+ctatccaaataaattaagcgaatcgaaataaactgtcacgatactgggcagttatcaact
+tatcacttatacagttcggacactctatattggtctgtgagtactctatcaaactaactc
+ataagttaactgcgcttccattaaatttcaatacgttcttgtgctgtgtacaaacctata
+atcgaataaatgacacatatggagatgcataataaaaaaaacggctccatatttctcgtt
+aatcgggcattcttaaggaggagcatctcaccaaaaataacgttcctgataagtcttaac
+tattagaccgtcttcgggaatgaacgaaacctcaagctagcatggtatagttcttgatag
+cgcgtaaattctgataatactgggcggacagctggaaattagttgccagtgcacctacgc
+aaatagtttacataaatcaacgggctccgaacgtaaatacaaagggttagttacatcgca
+acaagatgaaaagcatgtatgtctaccgtcatccgtccctaacaaacataaaggtggtga
+agaatctcgtaggtcaactataactccatccttgaagcaactactccgcgtccgtgtgcg
+tagttcgcaacgagaacactactgaaaaaagctaaacaactctcggtacaaatgcggctt
+gtgtcgataaagttggtggtagtgcacggaataacataacaaggaatattatttattcaa
+attttttgtgactgttatttgttttctgcctagaatgtaaggatgtgttttttgtgacct
+gatagttacgcttatttcaggtccacggtgcgtgagagtgtgtcctataacggcagggga
+gcgaagtagtgtcctttagactattcaaggtagaattttgataacgctctataaaaggta
+gaaaatcatgattgagcaataagaccccaacttatcaaaaaaggagttctcgacagcgcg
+tgtacagtccctataacggctgtatttcctgtgtcacaacaccctcccatcgcactcaaa
+atgtagatttatgatcagacgctaacttgttcttagagaaaaatacacgggatactctgt
+gcaacgatttcattaataaggtgcagcttgggacttttttggccgtaggctttattaaca
+ttcacagtaggtagcgagacttcctatgaaccaatcatgccacgcgttttaacgtttcaa
+atataagctaggaagcgtttgccaggacttctataatgcaccgttttttttagtacttcc
+ttactagccttagtttatgttagagtctttccaattacaaaggattgaatagccaaaatt
+tctacaattctcagcgaacgccagcttaatctaaacacgagcttcaaatattctacatat
+cggcaggagtcaatatataaatatgaaaatcgtaccatcctcgtacttttagaccaaacg
+tcttcggataattaaatcctttttcaattaccacagtacgtgcattagaactactgctat
+gaaagtaaaccttgaaatatagtcctcaagagcgtatccaagtacattgcacgtgtatac
+agtcgtataaacgagttgatgttctgacgctagagcttaccattcgttaaacagataact
+aaaatttaatggctgagtgacttagtgttttcgacaaacgtcgcggatgtagactattgt
+ttataagcaatttttaaaaacatatgttcaaaacggtatgggatatgtcgaattccacag
+gggtttatgtaccatagaagtatgtataaggtactaaaggtttaaatctgtgatattcgg
+ttcggtgaaaatcagactagtcacacttagtgtctgtaaattagattgggtgaaggtaag
+cgatcccgaactctacaaggcatgggatgagattctaccgactccggataacactttacg
+atcgcgcataactctagctcttagataagtttaacttgtcgatctcataaacagttcaaa
+atctgcgatttattgtatcaaatccatcctctatcttctataatcatctgaaccgcgata
+cggcactatgagccaagtgaagattgaatccaagaaagctataattggtttattttagtc
+catttaaattaagtccggtataagtgctctgtacaatatgcagtctcatgggcatatacg
+ttaactaccttttgatacttcgaattggtaaaatatcgactatcgatttgcagtaaaagg
+tgtagagtccaattactctttcctgttacatacgatctcttagtttggacaactagccca
+tgatggcgctcctctagcgcatgaacctactttataattacatctttatcgatgaatttt
+tttagactgcggaggccttgagttttaacagggctgctaaatttcttaagcgattagacg
+gtagcgtcgtacgctacttgcttggaacaggcaccgaaaatattgatctactattgcgtc
+aactctattctgctaatagcgatggcaaatcacagaagccctcttagtgacaatagttgt
+caactatatctaagtcgacctttactgtatcaacgatcacggagagaattaccgaatacg
+aaacctcaggactaaaaaacggaaaggatttgtcgacggtaaatataatacttgttaagg
+gtagcgacacaggtatactttgggtgtaaacgtggtgcttcccggaacgattttcagacc
+agaaaattgttccggtaaccaggaaatctcgtctgcgttaattcgtgttagtaaacttga
+tcttcagactccttcttttcgttgcagcgagacttaaattatatctgcgaaatagtgccc
+cgtgcatacttcagatggtaggagataccatttggcccattgtgactttacgcgattaat
+taaccgacatacatctgttcctgagctatgatcgtctgaataaattacggtctcctcttg
+atacctaatggtttctggagacgtttctcatgttcaaatggatagcaggagatcgcttca
+tcaagtttagctacgcagagcatcaaaatatgtatgggaaagtcgatttccaaaccagaa
+gggataaagagaaataacggacttctccgtagattagcctgatattttgatgggaatcat
+ggcggcacatacgtaagagttgcgtgaacgaatattttggacggcgggagacacatatcg
+gccattcgttaaggtctctatattggacatcacaagcttagcagtatgagctactaacac
+tcaagacattattgattttttcaagatatgtttcattcctctaccgctattcccatacgt
+tcgattcgccgggtgagcgaaaccacgggactgaggttaagctaatcaataacaactcgt
+tgcgatagagacctatgtatactagagagaattccccaacatttttacaaaaacaaagca
+gactaaaatagatacagtccctccatacaattaggaccaacatgttattgccgatcctag
+cacacacaccacaaactcagaacttctgtcttacctatgaaagggtctgcacttctgatt
+gtacgtgtctaattagcattaatattaaaactaattaggataaactataggtacgagctt
+tactataagtcactaggtgttttccgatcgaaaaacgggaccttcaagccttggtaagta
+catttaggataaagaaaaaaaggaaggtacgtgactaatctgtctaaactgacaatagag
+tagtacctacatgcttcatgtcaagtcttaatacgcaagcgctctcgttatactgctcaa
+caaaactcataaagttggactccatcatttagaatcatagggaccaaaacatttatttgc
+tactgtcactttgtaggtgttctattctgaattcctcatattgatacatgaatcggaata
+cctgtggatcccttaggacgcacgtgctttctttacgtcagaatacatattgtcagaatc
+gagaagttccatgcaattaagaattcgcctctttgaaaactcatatccccacatataggg
+tccaccgttattcggaaacgatataataattattccagcgttgagcgtcccttaagagcg
+cattttcgcttggcctttcttctacgactctacaacgcaagtggctgtgtggagtttacc
+acagcgcagcaccccatagaactacctctgagagcgcgagatggtggcagtatgctctgc
+agctagcgtttagaacgcgcccgcgcattaaccagtcatattaaaatggactgtcttaat
+tgtcggcattaggagcaatattaactgatgagggtatcggtcgcagaagtaatgacggaa
+atacgcctctagtccgcagagatacgattacagactcagatcccctaacaagcaaaacga
+ttaaatcggaatcactccccctatgacatatttgaaatacacaagaaaccacgcaacatg
+tcccgcattctcaaccgcgctttataagatgttgagtctgagaattagatgacctaactg
+caagaatcatggcgagtttatctagtaggcaagtctgtaccctagggttcgaacgctgtg
+acgtcgtgatcggtctaaggacttagatgataaccaagaactggtttaccgagtactttc
+actattaggagtaattacatgcgttcaccgcggaatacgacgaaattttttcatatcttt
+atgagcgagatcgtgtcgtctttgcattgcaacagtcgctaccagtaattgctgatcaat
+tatagattcattatacagatgcttacttttctctattcaatactgtcatgagttgttttt
+aaataagcaccagaattatgtcgcctagtataatcttgcttccacttgaatcaatgcgat
+ggacagtattctactgattgcaaagtagtctatttcggcttagcagtacgcatgcctatt
+tttttgcaggcacagaataatatgcaactaggattctcggcatccaattaacaggctaaa
+acaccaccgaaagacaggtaatctacgaagttgatgtttactacagaaagcgaatgatat
+cacttggagaacattttagatgcccccttttaatctagactgagtgtaccaatatatcac
+cggtctaccgaatcagcttgaataaaccactctagtactcatgataaccgagcatacaca
+tgtatttctcaatgcactgaaggtgaactgtttacaccataccttgcgaatcaacgtggc
+gacttatacttctgtctttgagtacagcacaccctaatgaatctaagttagttgttgata
+cgaattgtaatttgactggatctcgcctcctcatctagattcttagagaagatgtttctt
+atagccggtactgtaactttattgatctggtttatggtaatcaacattttacctctattt
+aaacgtccttgcgccgtgcactcaatcctgatcggtttagattcaagcgattatcgagtc
+tggaggccgagaaaagaaatgcacagagtaagctctctattgcgacatctacgtagaaac
+tcgcatttcagatcgagtaagcaactctcattgtgttgattcagtaatacaagattacct
+acgcttctacgaaatatactatagatttagcctacgtcacctttagtgtcgagtcggagc
+tttgaagatcggatgcggtgtggactgtgtataggcaattttgctgcgagctcgtgactt
+ttggttgatgtcgatatcaatgggatacctcaaacgtctttatctctggataactcacat
+tgagtataccggtaaaaatttattctattcatctaaatagtcagtgagggctagggtcgc
+aatcacattaggccacatacacatacttaacatgttctattgacccgacccaactttagt
+agcattgtagccgtttatgcaaatatgccaggcgccaaacactagccagagggcattttg
+ttacatttatttaatcgattattacacagtcggaacacgcctacatgcgttcgacttatt
+tgcgacatggtcaacaattcagtaatttaatccaaaacctaaagtcagagacatgacact
+aaaatcacattaaggtcagttagtgaaggaatggctaaccagctagagaatgcatcatta
+acaggcacttattgtcaaatattttccagatctaagcaacatcacgttaaaaagtacaac
+aatcacttaaaacacatcagtccaggtgtaattagaaagccgcttagtaggcaagcgtag
+gagtataaatgtagacaatagtcgggacttagcagacactggatgcagtcatagaagatc
+ttgcataacacgttagggttagagctacgaacgcccatcattaactgcctaaagcgtgcg
+tgagcttagcgctaacttttccaacacgtttgtgatttcgttcataatgtatcaatttca
+cagtcatatacagggagtgtagaaaaatcgcaattaacatacgttgacctatttttgttc
+agagttcagttagagcctaatgattcgagagcaataatcaggacagcctcataggaagtg
+tcaatcacttagaagctatattattataaatcgctctttactgtcgtcgaaggaacgagc
+gagagagaatcagttgcctgcaactggcttaacaatatgatacataaaaatattttcatc
+accactaagacggtggaattcagacttattggcaacttaggatgggactattaaataacc
+cataagatgttgggataaagttacgaaacgaaagggatatagcctgttagataggaaatc
+cccaataaaacatagccggcctccacagcagtgatctattccgccacgcgatatctttat
+accacgcaatataccaataataaaggttaaatgtggttgcgatttaaaaaagatacatat
+cagttgcaccgcgtagcaaatccgtatgtgaagcgtaacctagaattatagcgtctgcaa
+gttctctaagcttcctctgcaagatacaatatgactttttagcttttttactaccaaatc
+tcagaatcttagaaacaggttggtacgtgctactcggaattcccaaagtaccctgctata
+tatgccattccttcattggtccgggctcaccatggggccatcatagtaatagaaggtagt
+aaaactagttgatttccgacttttaacaatcactatcctgacccagatatgggttccgac
+tggcccttactccagtaagggcagacacacagacaacgagaacttgataactttgaattc
+tcaaatcgatcattgcaacgtgacttatttactagcctactcctataattcatacgtcaa
+atacatttcaacggaggaagataataagtaaatattcactaaataatggtcgaaggagtc
+ctttgccaacataagtccacatatgcgctatagattttttcttggggttcatattcaata
+agataaacagcaagagtatcacgtcagcgagtcattgagatcttggctagcattgtgata
+gcatattctacctaaatggtagtctagcacagagtggataagatatcagttagatataga
+caagtactataacagatctcgcttcgttggattgtatggctagctttgatgatatgattt
+tataaaaattgatccagacctgacctggccaattatattcattttttatgagtaaaaata
+gataaccatgaaaatactcaagccccttaggacgtacaaagtggtaacataaatttcagg
+tgttattctgcaaccacacctgttttgggttttcaaaaaggctaagcagattggttttac
+agataatccctgaacactggtatctcccaacgatgtcgttcccaacccttgctgaccttt
+taagctctgctgaagttttgtaaactaggcggaaaatatgttcgatagatccactcgcct
+gaggtagaaattcgtcttagtaacgcctctttggattacacagaatagtgtactgacacg
+tacactgctgcagcagccatacgctaacattaaaattcgttgagtctacatttgttgtta
+ttcggattatgttattgggaatagtatttttattcccctgcgtgaaaccacatggataga
+ttagcctactcctaaagactcccttttggtctacggttcaattctcttactgagtttatg
+ttcgtaattatatcggcgcagtgaatctcctaattatcaccggagttaccagacgccatg
+aacttatggccagaaacattgcatgtggcctacataggattagtatcaagagtttacgtt
+tgcaacgacatttgaccaacttgaccattcctgcttgtagaccgcgggaactcccctgca
+cgcgactatagaagttggtggtggatgtggcttatgccgcaaatatggttttgaaaaaag
+taatctattgcttgatacctgaattgagacatgtataagggctattgccagatgaaaaac
+tgcatataaggtcaaacaatataagaacattatacataggatcttagcgttcctcaggat
+ggtatacgctataaagtctagcttcagcagctaaggagttttgccagtgcggacttccgc
+tggaagattaggtttaaccgccctgacatcttcataaggtcgggcctgattcaaacccct
+ggagtgccgtctcatacttgaattaatcgatggaaaacttcttctagtctaatattatta
+ttaacaaatgacggttcaataaataacaccgtaagggtgggaaactgttaagtgatgaat
+cattttaacctatcatccattagctacagataatgataccccgatccgactagggggtaa
+gtggttgttccgttaggataaaccatgtaaaacgttagagggtttgtagattaattggta
+ttccagataaatgaggtcagggcgagtgatcaattacactgaaaaattgtcagcttgcgc
+ggtagttgttaagacagtataaatgaaggggattcagaagcaagtttctcgattgactga
+atttataaaccagtcgtcaatcatgatttttgtgtcgattaaagcctaaatggtaattta
+aaccattgatatttatcgagtctataaatatctttggttgtatattacttcacaatcacc
+aattctaaatgattcttccactgtgcgggtggagatatcaggacgggttaaggttgacct
+acatcgttttgatacaacaaaaatcaaagcacatggctggggacttctcgatactatctt
+tgagatagtacgggcaagagtgggtgacgcctccctacattttcaagtctatcggataac
+ttctcggtaaaacgctcgcgatatagttttaaagcattgatttaatccacgcaggagcaa
+gttttaccggtcgaatgagaaaattcaacgtaagtgtcatatccagtcatggttagccaa
+aagcatgggttatccaaaaggaataaaacagctcttcaacaaagagatgaggcttcataa
+cttcgatgaatgcgtatggttctgatatatagatcgatgcatgaggacactttattttag
+ccggcgaattaatggaatccatacgttacttatttggacatgacttctaggtgtttttgc
+tgtcccgtttagcgatatttacagattagtatttcgtttctcatagttaattgtatctag
+atactaactcgttgaagacgcataccttgccatttgtacaggacttaactgttccgtgcg
+taatttgaatttcttataggttcttcaaggcacgaatacctcactcatgaccgttcatac
+tctagttaaggtcgggaatactacgtatgcagggaattgtaacctaggagatttacaact
+ctttaaacaagagtcgctgaggtccaggatcaaaacactgaatctcctaacttcgggtgc
+ctccgtaaatcacctagaaacctactcatacatttgcaattttgagatgtaggcgaaaga
+gagaaatctgctttttaacggtatctcttgggattccttttaaaaacacataacgatagt
+aatgtaccaagtaaccaaaagctgggatgtgtctgtgtactgatccgccgtgtcagagta
+gtccgccatgaatattgacgtcaaggctagtgtcatcaggtattgatgttcattgtaaat
+gaaggaatgaactaatgtcaccaagtaaagggggtgaaaatgctccccagggttctacag
+acatagagatggtcagaacacgacccccctctcaacgcagtgtatttgaaatatatggac
+atatctaccttattctgtaattttagatgtgttctgtgtataccgatattgataagtcaa
+taggcttgattacgtatcttaagacaaatctgtttcgcaagtaggaccgcatctttcaga
+ttgtttctttttatgccataacctgcccaggaattcaaaaggttatcgatacccgatatg
+ctgtgaattattattctaatggccactcattcctgcttatatctggaattggcatgaata
+tcttacaacctaaagtctggcgttgcgccagttctacttcgtaccggacaccatctccag
+tcgttaaccgaaggtgggtacgtcacataaaagttcattagaccacactttgtgccgacg
+tatatagatatattacacgtatagggaatgttttctcctaggtgacccgaccttctacta
+aggttgtacatcgtataatggcccattaactacgaggaaagtggtattgacctggtaatg
+cacgttcttcgatatataccgacgaggtaaagtctactattgcaaagtttgacgttatac
+tgataagtttagatttccctggatcgcgcatgaacaatgtatgcgttatctgccatatat
+aacatgttacaaatccttggggatactatcgctactatcatcggaccaaaattaaatagg
+ctagtgtcttatcagaacatcatgtttaccgaactgatctattttccaatttaagctgat
+attacgtccgcgtatttattttagttccccggatgacgattatctgagctacatcataca
+agttagcatactcgccggtgcattgatttcttatttcgctatatcttcaagttcacaggc
+ttcatatagttccaattagcagtataattaggttttgtaactttaaccatactttataaa
+aggttatattgcacaactgatcaagcatccgctataacccgagctttaccagttagcggc
+taataacaaataagatgacttcgtgtcatacgaccgtcatgatcatgctctaacttaggt
+gggaaccaaatttaggcaatgggtagtaataagtataaaatgataccacatatactataa
+caatgaaattatttgtaatccggtttgccaacgtatcccccttcgcgataaattaatgac
+atagggtcatccatgtgccaatcgtgtgtgccaaaatctcaaattcaattatcatcaata
+ttggccaagtgttataagcgttgaaagtgatataggccgccaaaaagtagtctacttaaa
+aaccaatatttatcgttcgttattgctggtagtacaacatcacgagcatttctcttttga
+gttgatttatactatatctgctgatgtgattatgtcccacttacccagaatattaagaaa
+gtcctagattgtaggtatacttgactataaatataatttaagactatacaaataatctgg
+ctacattatgccatcgtagaaactgataacgtagtaacgtcggacactagattttggtcg
+gggagtaatctagcatactaacgaatttgttaaatccgctgaaagtatatgtcattacct
+gcttggcctgtcttcaatacgtttagactattaaggactcatttcgagatccagtattaa
+ttatacgcatccatatttatactgaagacggattgagttaggacgacaagctaaacaaat
+attaagttaaggattagtattatattgtagaaactcgtcgggttggaacgattcatcatc
+atagaatgcgttacttattcagagagacttaattcggttatgactggcagctcacctgga
+aagtaggtgaaaggcaacagaagaatattgttgactgaattctacgggctacgaacgtaa
+ttacaaagcggttcgtaaagagcataaagatcaatacaatggatctctacagtattacgt
+aaataacatacataaacctggtgttgattcgactagctcatagattaatcattaattgaa
+gctacgaagacgcggaagtctgcggagtgagcaaacagtaatcgactgataaatgcttat
+aatatcgcgcttaaatgccgcatggtgtacattaacgtgggggtagtcaaaggaatatat
+ttactaggaatattagttatgcaaatgttgtgtcaatgtgatgtgttttatccagacatt
+ggatgcatggctgtgggggcacaggatacttaccattagttcacctacaagcggcgtgag
+agggtctcagttttagccagcgcagagaagtacgggcctttagacgattaatgctagaat
+tgtcataaacctcgtgaaaagctagttaataatcatggtgctagaagaacacaacttttc
+tataaaccagttctcgactgacagtcgtaactcactatatcgccgctttgtactgtcgca
+aaaaaacctcacatagaaagaaaaatctactgggtgcatcagtagagatcgtgttctgag
+agataaatacaccggatacgatctgcatcgagttcatgtattaggtcaagcttgggactg
+ttgtgccagtagcattttttaacagtcaaagtagggtgagacacgtcatatcataatata
+tgccatcgaggtttaaagtttatatgataagctagcatgcgttgcaatcgtattcttgaa
+tgctccgtggtttgtactaattcctttatagactgagtgtatcgtacactcggtacaatt
+acaaaggatggaagagcaaataggtcttcaattataacagtaccccaccttaatctaaaa
+accagcttcaattagtattaatttcgccaggagtatatatataaatatctaaagactaaa
+agactcgtacttttacaacttacgtcgtagcataattaaatcatgggtaaatgtcatcag
+taagtgcattagaaatactcctttgtaaggatacagtgaatgtgtctcagcaagtcagta
+gaaatggaaattcatactcgattaaggcctataaaactgttgttggtatctacagagtga
+ttaaaattagtgaatcagattacgaaaatgttttcccgctcgcacttacgcgtttagaca
+aaagtacaggtggtacaattggctgtagtagaattttggtataaaataggtgataaaccg
+gatgggtgtgggcgaattcaaaagcggtttttgttccatagaactatgtagttggttata
+aaggttgtaatctcggagattaggttagggcttaatcagaatagtaacaatttctctatg
+taaagtacagtgggtgatcgtatgagttcacgaactcttaatgccatgcctggacaggat
+aaacaatacgcatataacttgacgatcgagcttatatcgacctatttgagaagtttaacg
+ggtcgatataatatacaggtcttaatagccgattttttctagaaaagcaatcctatatct
+tagttaatcagatcaaccccgtgaacgatatatcagcaaactgaacattgtatacaacat
+tcctttttgtccgggtggggactccatttaaagtatctcacctagaactcagcggtaata
+gatgcagtctcttgcccagttacggtaactaaatgttgatacttagaattgctaaatttt
+agtctagacatttccaggtaaaccggtagacgacaatttctctgtcatctgtcataagat
+cgcttagtgtgctcaaattgcaattgagggccctactatagacaatcatcagacttttta
+attaaatagttttccatgaatgtgttgtcaaggcggaccccttcacttttatcacggctc
+ataaatgtcgtatgactgtagtcggtagcggccttcgagtcttcaggggaaatggaaaag
+aaattaggcttctaagatggactataatcgattaggctaattccgttcgcaaatcacaga
+agcaatcttactcaaaattgttggaatcgatagcgaacgcgaccgtgaatgtttaaaagt
+gctcgcacagaattacccaatacctatcatcacgacttaaatacccaaagcagttgtagt
+cgcgtaatagattaagtctgaagcctagagacaaagggatactgggcggggaaacctgct
+ccttcacggtaacatggtaacaacagaatttggttaaggttaaaacgaaatatactcgga
+gtgaattactgttaggtttcgtcatcggatcaataagtagtttccgtgaagacactctta
+tattagatctccgaaattctgacccgtgcattaggcacttggtaggagattccatttgga
+acttgctcaatgtaagccagtaatgttccgaaataattcgctgcaggagcgaggagccgc
+tgaataaaggaccctcgcatcttgttaccttatggttgagggtcaccgttctctgcgtca
+attccagagctggagatacattcatcaacgttacctacgcacagaataaaaagatcgagc
+gctaactcgttttcctaaacacaacggatttagacaaattaccgaatgcgccggagagta
+gcatcttagtgtcatgcctatcatggcggctcagtacgaagagttcaggcatcgaatatt
+gtggtagcccgcactcaaagttccgccattaggtaagctatatattgtggtcagaacttg
+aggacaactatgagctactaaaaataaacaattttgtcatttgttctagatatgtggcat
+tcatcgaacgcttgtaccagaagttacattcgcagcgtgagcgaataaacccgaatgagc
+gtaacattatcaataacatatagttcagatagagaacgaggtattcgacagagaattacc
+caacattggttattaatctatgcagaataatttagataatgtcactacataatattagga
+ccaaaaggtgattccccagaagacaaaacaataaacaatctcacatattcgctagtacct
+atgtatgggtatgatcttctgattggacggggataatttccaggtatattaaaacttatt
+accataatctagacctaagagaggttatataagtaaagagctgtgttccgatagaaaaac
+ccgaccttaaagacttgcgaagtaaattttgctttaacaaaaaaacctacgtaagggaat
+attctgtataaactgaaaagtcaggtgtaactacatgagtcatgtcttcgattaattaca
+atgcgatctcgttattctgatcaactaatatcataaactgccactacatcttgtacaatc
+attcgcaacaatacttttatgtgctaaggtcacgtgcttcctctgctatgctgatttaat
+cagattcataaaggaatacgaataactctggatccattaccacgcaagggatttatttac
+ggctgattactttttggctgttgacagaactgccatgaaagtaagatgtcgcatcttgca
+taaataatagcacctaatatagccgacaaagtgattccgataacagattttaagttgtcc
+agccttgagactccatgaagaccgcttgggagcttccccgtgattagaagaatctaaatc
+ccaagtggatggggggagtttaaatctcagcaccaacaaatagtacttcctctcagagcg
+cgtcatggtcgaaggagcctatcctgatagaggtttgaaagcgcacgcgcatttaactgt
+catattaaattggaatctcgtaagtgtcggcagtacgacaaattttaactgatgtcggta
+tacggagaagaaggaagcacgcattgaagcagctacgcagaactgagaagatgacactct
+aagatacaattaatacaaaaacgttttaagcccaatctatcaacagatgtaagatgtcta
+atacacaagaataaaaccttcatgtcccgatgtataataacagctttatttctgctggtc
+gaggtgaagtagtggaaattactccatcttgctgcgcgtctttatagtgttggctactct
+gtaaccgacgcgtccatccctctctcctagtgatccgtatatccaattagaggataacca
+acatctgcgttaccgacgaatttaaatttttcgactatttaattccgttcaaacccgtat
+tcgtagtaagtgtttcatagatttatgaccgacatcgtgtacgagttgcagtgcatatgt
+agataccactaattgctgatctaggatacatgctttataaacatgcttacttggctattt
+tatttactgtcatgtgggggtttttattttcaacaagtatgtgctaccattggataatct
+ggcttcaaattgaagatatgcgttccaaacttgtctactgtttgctaagtaggagttgtc
+ccattagaactacgcagcacgtggtttgtgatcgaaaagaataattggcaaatacgaggc
+tagccttcaaatttaatgcagattactcctcagaaacacacgtaagcgacgaacgtgatg
+tttactacacaatgcgtatcatagaaattcgtgataatttttgttccaacctttgaatct
+agactgagtggaaaaagatttcaccgggataccgtttatgctggttttaaaaactcgtcg
+aatcatcttataactgcattcaaatggatttctcaatcatctgtacgtcaactgttttaa
+caataacgtcagaataaaccggcacaatgagacggcggtctttcactacaccacaccctt
+aggattataagtgacgtgtggattcgaattctaaggtgacgggatctacaagcctcagct
+acattaggtctgaagatctttcgtatagccgcgtatgttactgtttggatatgggttatg
+ctaatcaacagttgacagcgagtgaaacggccttgcgacctgaaatctttacggttacct
+tttgattcaagacaggatcgacgatggaccacgtgaaatgaattcaaaactgtaacatcg
+cttgtgcctcagcgaccgagtaacgacaagttcacatcctctatgcaactatcattgtgg
+tcattaaggtattcaagattaactaagagtcgaccatatattctagagttttacaattag
+gaaccgttagtctagactaggagcgtgcaacatcgcaggaggtgtggactgtcttgaccc
+aagttgcctgacacatagtgtcttttgcttcatgtccttagcaatgcgatacctcaatcg
+tagttttatcgggataaataacatggtgtttaaccctattaatggtttctattaatctaa
+attgtaaggcagcccttgggtcgaaagcacattaggccacatacacagtatgaaattgtt
+cgagtgtccagaccataattgactaccatggtacacggtgttgctattatgactcccgca
+aaactcttgacagagggaattttggtacattgatgtaatcgatgatttaacagtaggaac
+tagacgtcatccgttagactgagttccgacatgctcaaattgtcaggatttttatccaat
+aactaatggctctcacatgtaaataaaatcacattaacgtcacttagtgatggattcgct
+aaacagatagactatcattcatgaactggcactgtttcgattatatttgcaacatcgaac
+atacttaaagttaaatacgacatcattcaattaaaaaaattcagtacacctctaatgagt
+atcccgctttggaggaaagagtagcactttaaatggacaatttaggccggactttcctgt
+aaatggatgaagtcattgtacagcttgaataaatcgttagggttagtccttacatccacc
+atatgttaatgaataaagcctgagggaccttagagctaacttgtccaacacgttgctcat
+ttacttaataaggttgaaatgtatcagtaagtgacagcgagtgtagattttgaccattta
+actgaccttcacagttttgtcttcagacgtcacttacaccataatgatgacagagcttgt
+agatgcacacactcattcctagtgtaaatcaagtagtagctagattattataaagagata
+ttttctggcgtcgaacgtaacacagagagagtataaggggcatgataatggcttatcaat
+atgtgtaagaaaaagtttttaatatcatctaactcggtggaatgcacacttatggccaac
+tgaccttgggacgagttaagataccataagaggttgcctgtaagttaagataacaaaggg
+atattccatctttgtgtgctaagaacctatttatatttgcagccataaaaacctctgtgc
+tatgcagccaccagagttatttatacaaagaaagagaccatttagatacgttaattctgc
+ttgcgatttattaaacagacatttcacgtccaaccactacaaaagccctatcgcaagacg
+atcattgtattatagcctatgcaacgtagctaagcggccgaggaatcataaaatatgaat
+tgttacattgtttactacatatgatcacaatctttgtaaaaggttcgttcgtgatactac
+catgtacctaactaacctgagatatatgcaatgacttatggggtcagcgcgcaacatccg
+caaagcatagtaatacaaggtaggaaaacttctggatttcccaaggttataatgctctat
+actgaccaagagatccgttacgactcgcaatgaatactctaagggcactcacaaagaaaa
+ccactaattgataaatttcaatgataatatcctgaattgcatcgtgtatgagttacgaga
+agtcgcatttaatgaattagtcatagaaatgtcatagcaggaacataattactatatttt
+aacgatttaatcgtagttggagtcctttcccaaattatgtcatcagttccgatttagatg
+ttttcgggcccttcttagtaaagaagttaatatccaagactagctcctcacccacgcatg
+cacatattcgcgagaagtctgatagaatattcgacagaaatgcgactctagctcacactc
+gttaactgatcaggtacttatagacaagtacgttatcagatatcgcttcggggcattgtt
+gcgctacctttgtgcatagcagttttgaaaaattgttcaagacctgaacgggaaaatgat
+attatttttttaggaggaataatacagtaccatgtaaatactcaaccaccttacgtactt
+cttacgccgaacatatatggcacgtgttattcggctaacaaaactgttgtgccttttcta
+taaggataagcagattcgttttaaacatatgacctgtaaactgggatctacaaaagaggt
+acttaaaataaattgcgcaacggtttagatctgcggatctttggttaaagagcaccatta
+gatgtgccatacttcctatcgcctgagcgagaatttagtctgaggaaccactcttgggat
+ttaaaacaattcggttaggacacctactcggcggatgaagcaatacgataacattaaaag
+tcgttcagtctaattttggtcgtagtacgatgagctgatggccaattgtatttttattaa
+cagcactgaaacaaaatggagactttagactaatactaaagtctcaatgttcgtcgaacc
+ttaaatgctcggaatgaggggatcttcggaagtatagcgccgaagtgtatctcattatta
+taacaccagtgtacagacgacatctaattatggccagaaactgtcattgtgccattaaga
+ggattagtagatagtctggaccgtggaatagaattttgaccaaattgaccagtcctgctt
+gtagacagcgcgatctaaactgcacgagaatatacaagttggtggtgcttgtggctgagc
+acgctaagatgcgtttgtttttacgattctagtgcttcttaacgcaattcagtcttctag
+atccgctattccaacatcaatatctcaatttaaggtcaatatatataacaaaattagaca
+gagcagctgacacttacgaagcatcgtagaaccgatatagtcgaccttatgatgatatgg
+acgtgtccaagtccgcacttccgatgcatcttgacggtgaaccgaaatgaaatcttcatt
+agggcccccatgtgtcaaaccactcgagtcccgtctctgaagtcaagtattactgcgaaa
+aattcgtctactattagtttattatgaacttatgacgcttaaataaattaaacagtaagc
+ctgggaaaatgttaaggcaggaatctttgtaacagttcataatgttgctaaagattatca
+gaccccgtgaagacttcgggctttgggcttcgtaccgtagcataatacatctatatagtt
+agaggcttgcgtgttgttgtgctattccacatatagcagctctgggcgactcttcaatga
+aaatgaaaaatggtaacctggcgacctacttgttaagtcagtttaattcaaggggattaa
+gtaccaagggtcgagtttctctgtatttattatactgtaggcaagaagcttttttggcga
+gatttaagacttaagcctatggtaaaaatttgatagtgagcgactatagtaagagatttg
+ggtggttagtaattaaaattctcctatgctaaatcaggcgtacaatctgagggtgcacat
+ttctcgacgcgtgaaccttcaccgaaagcgtgtggattatacaaatttcaaacatattgg
+cggggcacttatccataatagatttctgtttgtacgccaaactctgcctcacccctccat
+aaattgtattggctagaggttaaattctccgtaaatagagacacatatagttttatacaa
+ttgtttgaatcaaagcacgagaaacttttaaccgtacattgacaaatgtcttcggatggg
+gcagagcatctcttcgtgacccaaatcaatcgctgagcaataagcaagaaaacacagatt
+atacaaagagatctggatgaagatattcgtgcaatcactatcgttatgttagagagttcc
+atgcatgaggactcgttttttgaccaggagaattaagccaagaaataactgacgtatttc
+caaatgaattctacgtgtttttcctgtcacctttagccagtgttaaagatgactatggag
+tttcgaataggttattctatagacattataacgagtggaacacccataccttcacagtgc
+taaaggtaggaacgggtacgtcaggtagttcaagggattttaggttcttaatccaacgaa
+gaaataacgcatcacccgtcattctattgttttcgtcgggattacttagtaggcagggta
+ttctaacctacctgagttacaaatctttaaaaaactggccatgaggtcatggtgataaaa
+tctgaatcgcctaaattcgcgtccctaaggaaatatactagaatccgtctcagaaagtgc
+aaaggttgacttcttcccctaacacagaattctcagttttatagctatctagtggcattc
+ctttttataaaactttacgtttgtaagggtccaactttacaaaagctcggatgtgtatgt
+gtaatcttccgccgtgtaagacttggaacccatgtatattgacggcatggcgtggctaag
+caggtattgatcttcagtgtaaagcaaggtatgttctaatctaacaatgtaaagccgggg
+attagccgccaaaggggtctaatgacatagagatgctctgaaatcgtaccaactataaaa
+gcacgggatttgaaatatagcgacagatcttccgtattctgttagttgacatctgtgctg
+tctttaccgattgtgatttggctttagcagtcatttagtttcgttactcattgctcgtgc
+gatagttccaccgaatatggcacattcgttctttttttccattttactgcaaaccttttc
+aaaagctgatcgataccactgatgatggcattgattagtcgattggcaactatgtcctgc
+ttatatctccaattgcattgaatatagtaaaaaataaaggctcgccttcccaatgggcta
+cggagtacacgaaaaaatcgcaactcgtttaaccaagcgccgtacctaacatataagtga
+ttgagacaaatagttctccagacgtattgagatatatgtctcctataggcaagcgtttct
+aattgctgaccagaaattagaattaggttgttaatactatattcgaccattttattccac
+gaatgtgctattctactggtattgctccgtatgcgatatataaccaacacggaaagtcgt
+cgattgcaaagtggctccgtagaatcatttctggtcatttaccgggagcgcgcttgaaca
+atggatgcggtatctgccatattgttattgttaaaaagacttccgcttactatcgcttcg
+atcatcggaaaaatattaatgaggattgggtcgtataagaaaatcatcttttcagttcgc
+agatttttgccaatttaaccggttatttcgtcagacttggtagtgtagttacaagcatca
+cgattatatcagctacagaattaaactgtcctgactcgacggggcagtgtgtgagtattg
+cgctatatattcaaggtaacaggaggcatataggtcatagtacaaggataatgaggtttg
+ctaactttaaaaattattgatttaacggttgattgaaaatctctgcaagatgacgctaga
+acacctgatgttcaagtttgccgataataacatataagatgaattactgtctttagaccc
+tcatgttaatccgctaacttagggcggaaacaatgttaggctatgcggagtaagtactat
+attatgataccacatagaatttaacattcatatgatgtctaatacccgttcccaaccttg
+caaccgtcccgattaattaagcaattacggtcatcaatgggccaatcctgtctcaaaaat
+tatcatattcaaggttcagctattttggcaatgggtgagtaccgttcttagtgatttacg
+aacccataatctaggcgacttaatatacaagatttagagttacgttttccgggtagtaca
+tattaacgaccatggatcgggtgaggtgttgtattagttatctgatcttgtcagtagctc
+ccaatgtcccagaatattatgtttctactagagtgttcgtatactggaatttaaatatta
+tgtaagactagacaaattttatggatacattaggccatcgtagaatatgatatagttgta
+acgtccctctatagattttcggagggcaggtatattgcttaataaagatgttcggaaatc
+agcggaaaggatttgtaattaactgatgcgcagcgcttaaataagtttagactattaagc
+tatatgttcgacagcatgtagttttttttaccagaaagtgttatactgatgacccatgga
+ggtagctcctcatgataaaaatattgttacttaagcattactattatagtgttcaaacta
+gtaccgttgcatactttaagaatcagacatggcgtttcttatgcagacacacttttttag
+ctgttgacgcccacctcacatccatagtaggtcaatcgcataagaacaatattctggact
+gttttattacccagaagaaagttttttctttccggttcgttaagacaataaagatcattt
+cattcgttctcttaacgatgaactaaagtacttaaagtatccgcctcttgtttcgactag
+cgcatagtgtaataattaaggcaagataagaagaacaggaacgcgcacgtcggagataac
+tctaatagtctctttattccgtttaatatagcccgtaattgcaccatgcgctacagtaac
+ggccgccttcgcaaacctatttatgtaattccaagtttaggtatgcaatggttggggcaa
+tgtgaggggttttatcaagactttcgttgcttcgcggggggcgcaaagcagactttacag
+tagttaaccgaaaaccgcagggagtcgctctaagtgttaccaacccctcactactacgcg
+aaggtactcgattattccttgaatgggctgaaacatcgtgattagcgtcttatgattcag
+gctgatagaagaaaacttattttctatattccacgtatacaatcacactcgtaactaaat
+agttcccagcgttgtaatgtcgctataataaataaaatacaaagaaaattcgtctgggtg
+cataagtacagttagtcgtctgtcacataaataatccgcagtcgatctcattacaggtat
+tgttgttggtcaaccttcgcaaggtggtccaagtagcattgttgaacagtaaaactaccg
+tcacacaaggaatatcataatagatgccatacacggttttacttgatatgtttacagtcc
+ttgagttgcaatcgtagtattgtttcatccggggtgtgtacgaagtaatttagacaaggt
+gtgtagcggtcactaggtaaaatgacttaggatggatgagcatttaggtattctatgata
+acactaaccatcatgtttctaaaatcctcaggaaatttgtattattttaccaacctgtat
+ttatagaaagtgcttttgacttaaagaagccgaagtgttcaaattaaggagtacctgatt
+gaaagaatggggaattgtaatctgtaactcaattacaaataagccgttctaaggattaag
+gctttgtgtctaagcaactcacgtgaattcgaaattcatactcgattaacgactttaata
+ctcttctgcgtatctacagactcatttaaattacggaatatgttttcgtttttggtttcc
+agctcgcacgtacgcgtttacaaataaggacacctggtacaattggctggagtacaatgt
+tggtttttatttgctgattatcccgatccctgtgggcgttggcataaccgggttttcttc
+aagactactttcgtgttgcttatatacctggtaatatcggtgagtagcttagggcttaat
+cacaatactaacaagttctctatggattggacagggcggcatccgttgactgaacgatct
+attaatccattccctgcactggataaacaagacccatttaaattgaccatagagatgtta
+gcgtcatatttctgttcgtgatagggtacatatattataaacggattatgagcagtggtt
+ttctagaaaagcattcatagttaggagtgtatcagatcataccactgaaccatagagcac
+aattctctactggctatacttcattcctttttgtccgggtggggacgaaatttaaaggtt
+ctaacctagaacgcagagcgaattgatcaaggcgctggccaagtgaacggttctaaatgt
+tcttaatgagaattgcgtattttgactattgacagggcatcgtaaaccgctactcgactt
+ggtatctgtaatctgtatgtagatagagtacgggcctataattcaaattcagccaccgaa
+gattcacaatcttcagacgtttgaaggaaagaggtttactggtatgtggtgtcaagcccc
+acccattctctgttatatccgagcattaatgtagtttcactgtactacggtcacgccgta
+gagtcggcagggcaaatccaaaacaatttaggctgagaagtggcactataatagtttagc
+ctaagtcccttcgctaataactcaacaaagatgacgcaaaagtcggcgaatagattgcgt
+tcgcgtaagggtatcttgaatactgatagctctcatggtaccaagaactttcataacctc
+tttatttaccaaacctgttctactagcgttagtgttttagtctgtagccgacacaaaaac
+cgagaatggccggcgtaaccggcgcctgcaagctaacatgggatcaaaactattggctta
+acgtttaatcgaatgagactagcactgtattactctttcgtttcggcagcggatcaataa
+ggaggtgacggcatcactctcttatagtagatatcacttattctcacaacggaagtagga
+tcttccgtcctcattaaatttgcaactggctcaatgtaacactgtaatgttaacaaagta
+tgagctgaaggtcagagcagacgatgtagtaaggtccctcgaagctgcttacagtatcct
+tgaggctcaacgggctatgcggaaattccagacctcgagttacattatgaaacgtgtcat
+tccatctcattaaatagttcgtgccctatcgccttgtaatataaacaaccgtttttgtct
+attttcccaaggagaaggagagtagcagcttagtggcttgcctatatggccccctaagta
+cgtactcggcacgcttagaagattgggctaccccgcactatatgttcccaaagtaggtaa
+cctagatagtgtcgtatgaaattcaggtcatcgatgagagtataaaaatatacaattttg
+gcaggggttatacattgcgggcatgaagagtaacattggacatgaacggacattcgaacc
+ctgtgagtttaataccctatctccggatcattataaagtaaatatacgtcacttactcta
+cgtgcgtttagacagtctttgaaactaaattggttatttttctttcatctagatttgtct
+gtatctaactaaattatagttccacataaagctgattcaactgaagacataaatataaac
+tttctaacatagtagcgaggaaagagctatgcctagcatcggatcatgcgtccgcgagta
+gttcctggtagagttaaaagtttttccagaatctagaccgaacacagggtagtgaacgaa
+agtgcgcggtgaacatacataataccgaacgtaaacaattccgttcgtattgttgctgta
+tctatatttcctacgtaaggctatttgatctataatatgaaaagtcacgtcgaaataaat
+caggaagcgcttcgagtatgtacattcagatctccttagtatcatcaaattatagatttt
+acggccacgaattattggtctagatgtcccaaaaataatttgatgtcagtagcgatcgtg
+cttcctcggagttgaggttggaagaagagtcattatgctataccaagaactctccatcca
+gtacctagaaaggcaggtatgtaccgctcattaattttgcgatcttgacagatctgcatg
+caaagtaacttgtaccagatggcttttataatagaaactaagtttcccgaataacggtgt
+acgataacagatttttaggtgtacagacgtctgactcaatgaacacacattgggacctgc
+cccgggaggagtagtagataattaccttctccagcgcgggtcttttaatatcacaacata
+aaaatactaattaatatcacacaccctcatcctcgatggagcctagcatcatacacgttt
+gatagacaacgccaattttactgtaatatgatattcgaatctagtatgtggacgctgtac
+cacattgtttaaaggagctccctttaccgacatgaacgaagcaagctttgtacaagatac
+gaagaactcagtactggtaactataagagacaatttatacataaaagtgttaagaccatt
+atataaaaagaggtatgaggtctttgtaactacaataatacattcatcgaacgatggaga
+ataacagagttatttctgctgctcgagctctagttctgctaatttctcaatcttgatgcc
+actcgtttgagtcttccattcgctcttaacgacgcgtacatccctctctcctactcttac
+ctatatcctattactggttaacctacatctccgggaaagacgtaggtaaagtggtccacg
+attgtattcacttataacacctagtagtactatgtgttgctgagagtgaggacacactta
+ctctacgagttcaagtccatatggacattacactttttcagcatctaggtgtcatgatgt
+attaacagccgttaggggctatttgattttatcgattgtcggcgtgtgtattttcaacaa
+ctaggtgctacaattcgtgaataggcatgaaaattcaagattgcagttcctatcttgtat
+aatctttcctttggacgagttgtaccatttcaactaacctgcaagtggggggtcatccat
+atgaagatttgccaaatacctggagaccctgaaaagtttatccagattaataataacaaa
+caaacctaagcgaagaacgtcagctttaataaactatcactatcatagaaattcctgtta
+attgttcttccaaacgttgaatagactatcacgggtaatagattgaacacggagaacgtt
+tatccggcttgtaaaatatcgtcgaatctgctgataactcaattatattcgatggagaat
+tcatatctaccgcttagcttttaaaaattaagtcagattattccgccacaatgagaaggc
+gcgagtgcactaatcaaatcacttaggattattacggacgtctgcattacaatgctttgg
+ggtagggttatacaagcatatgattctttaggtctcttgatcgggcgtttaccaccgtag
+cttaatgttggcatatccgtgatcctaatattctgttgtcagcgtgtgtataggaatgca
+caacgcaaatctttaagctgacctgttcatgaaagacaggagacacgaggcaccacctca
+attctatgcaaaactctaacatagcgtggcactatgagtacgtgtaacgacaaggtctca
+tactcgatcctaagataattctcgtctggaaggttttaatctttaactaagagtagaact
+tagtttattgacttttacaattaggatacggttcgcgactctaccacagggcatcatacc
+tggagctctgctatctcgtgaccaaagtggcagcacacatagggtcgggtcctgcatcta
+ctgagcaatccctttaagcattcctagtttgagagccatttagatattgctgtttaaacc
+gattaatggtttctattattataaagtgtaacgctcccattcgggacattgaaaattagc
+aataagacaatgtatgatattcggcgagtctcaacaacattatggtctaccatgggacaa
+ggggttgatatgatgaatccacaaaaaatagtcaaacacccatggttcgttaagtgaggg
+tatccaggtgttataaggacgatctagaagtattcaggtacacggtgttcagacatgctc
+taattgtcaggttgtttataatttaacgtatcgctctctattctaaataatataaaatta
+accgctcgtagggatgctttccagtaaaagatacactatcattaaggttatgcaaatgtg
+gcgatttgatttgaatcttagtacattcttaaacttaaatacgtattatttaaagtaaat
+atattatctaaaccgcttttgtctatccacatttcgtcgaatcacgacctcgttaatgcg
+acaatttacgaccctctttcatctaaagcgatcatctatttcttctgattgatgtaatac
+tgacccttactccgtacatacaaatgatggtaagcaagaatgactgacgctcctgtcacc
+tttcgtggcaatcaactggcgctggtactgaagtagcttgaaagggatatggatgtgtat
+gccaggcttcattttgacaatttttctgtcctgctcagtgttgtctgaagtcgtatcgta
+cacaataatgatgactctcattgtagatccaatcacgctttcctacgctaatgaaagttc
+tagatagtgtaggtgttagacagaggttagcgcctacatccttacacacacagtgttgaa
+cggcaagcataatcgagtatcaatagctgtatgtatttgtttggaatatcatatttctcc
+cgcctttgaacaatgatgccaaaatgtcctgccctagagttatgataaaataactgctgc
+cctgtaacttaagtttacaaaccgatattcaatcgttgtgtcctatgaaaatatttatat
+ttgcaccaagaaaatcatctgtgcgatgaacaaaacacagtgatttataaatacaaagag
+tacatttagttaccggattgcggcttgacatttattttacagaattttatcggcaaaaca
+cttcatatgaactatcgcttcacgataagtctatgatagactagcattcgtagagaacag
+gaagagcaatcattatatatgaagtgttacagtgggtactacatatgagatcattaggtc
+tatatccggccttcctcataagaccttggaaatatcttacatcagagatatcaaaggaag
+tatgggcgaacccagaaaaagccccaaagaatagtaattcatcggacgtaatagtctggt
+tttaactaggggttattgatatttaagctaaaagagttccctgaacactcgaaatgtata
+atctatcccaactaaaaaagtatacctctaattcagaaatgtcattgagattagactgat
+gtcaatacgctaggaggtaagacaagtagaagtttttgatttaggaattgaaatgtaata
+cctccatcttaagttctatattttaaagttttatgcggacttcgagtaagtgcacaaatg
+atggcataagtgcccagttacatgtttgcggccccgtatgagtaatgatctgtttatcaa
+tctctagctactatcccacgaatgcactgatgccagtcatggcgcttacattagtcgaca
+gaaatccgacgatacctatcacgcgtgaactgttctggttcttattcaattcgaagtgat
+ctcagatacattacggccatgcttgcccttcatgtctgctgagcagttttgttataggct
+gaatctcctctaagcgaaattgataggatttttggtggtcgatttagtctgtacctgctt
+attaagattcaaaatgacctacttcttacgccgaaatgatagggatcggctgaggaggat
+aaatatacgctggtgcctggtatttatccagaacaagttgcctgtgtatcagatgaactc
+taatctccgagataaaaaacaggtacgtaaaataaaggccgcaaagggttacatctcagg
+atcgtggcgtatagtccaccattagttctgacttacttaatatagactgaccgagattgt
+agtatgtggatccaagcttgccatgtaaaacatgtcggttagcaaaacgtataggagcat
+gatcaaagaagagttaattaatagtactgcactataattgtcggcggagtaccatgagct
+gttgcccaattcgatgtttattaacagcacgcataaaaaatccagacttttcaattagaa
+ttaactataaatggtccgcgaaccttaaatgatcggaaggacgggatctgccgttgtata
+gaccccaactctatctaatttttataacacctctgtaatcaacaaatcttattatgccat
+cattatgtcattcgccaagtaagtccagttcgagattctctggaccgtgcaatagtattg
+tcaaattatggtaatggaatccttcttctaacacccttagaaaagccacgagaattgaca
+agttgggcgtgcttgtccaggagcaacataagtgccgtttctttttacgatgatagggat
+tcttaaagcttttctctattctagatcccagttgccatcatcaatatctcaattgatgct
+cattatatagttcttatttagtatgtccagatgtcactgaagatcctgcctagaaccgat
+attctcgacaggatcatcagttcgacggggcaaacgcacctatgcacatccatcttgacc
+gtgaaacgaaaggaaagagtcagtaccgacccaatgtggaaaaaaactcctgtccacgat
+atgtaggcaagttttactgcctttaattagtagtcgattagtgtagtttgatattatcta
+ccttatagaatgtaaacagtaacccggccttaatggtttggcaggattctttgtaaaagt
+taataatgttcataaactttatcagaaaacctgaagtagtccgcctttcgcctgcgtaac
+gttgcagattaattcgttttacggagtggcttgcgtcttgttgtccgagtacacatattg
+ctcctctcccccactcttctaggaaaatcaattatgctaacctgcagaccttcttcttta
+ctatctttaatgcatgcccagtatgttcatagggtagacttgctatctattttgtataat
+ctacgaatgatgcttggggcgcgacttttaacaattaagccgttgggtataatttgagag
+ggtgccacgatagtaagagatttccggcgtgagtaaggaaaatgataataggattaagca
+ggcgtaatagctcaccctcctcagttctccaaccctgaaccggctaagtatgactgtgca
+gtattaattttgaatacatattgcagcccctaggatacattatagatgtctctttcttac
+ccaaactcgcccgcaccaagaaagaatgtggattcgattgaggttaaattagccggaatt
+acagacacagattcttgtttacaattgtgggaagaaaaccacctcaaacgttgaaaccta
+cattcacaaatggattacgttggggatgagaatcgattccggtcaaaaatcatgcccgga
+gcaataaccaagaattcacagaggattaatacacttctccatgaagataggactgcttgc
+actatccttatctttgtgtcttccttcaagcaccaatcgtttggggacaaccacaattat
+gccaagaaataacggaaggtgttccaaatctatgagtccgcggtttcatcgcaacgtttc
+actgtgggtatcatgactttggactttagatttgggtattctagagactgtagaaagact
+gcaacaacaagacattcacagggcgaaacctaggaaaggggaccgcacgttgtgctaggg
+atgtttccttaggaatccatacatgtaagaaagaatcaaccgtaattatagtgttttcgg
+ccccttgaattacgtgcatgcctttgctaaaagacctctgggaaatagattgaatattct
+ggacagcagcgaatcctgattatatctcaagcgaatatatgacccgcaagaaggatttat
+actagaataagtctaagaaagggcattgggtcacttcttccactaacacacttttatcag
+ttttataccttgagagtcccatgcatttttatatatatttaactttcgttgcgtaaaact
+ttaaatatgatccgtgctctatctctaatctgaacaacggtatcacgtcgaacaaatcta
+gtggctacgaatcgcgtcgctaagaacggtttcttctgctggcgttagctacgtatcttc
+tatgctaaaaatgtatagccccgcattagcagcaaaaccgggagaatcaaatacacatcc
+gatgaaatcgtaacaaagataaaacaacgcgatttctatgtttgccaaagtgattaagtt
+gtatcgtaggggtcagcgctgatgtcttttcagtttgggttttggatttaccagtctttt
+agtttcggtactatttgatcgggacattcgtccaaacatgatggctcattcgttcttttt
+ttcaattttaatcaaaaccttgtatttacctgatacattaaactgagcatcgcatggagg
+tggagattcccatatatgtaatcatttgatatcctattccattctttttagttataaata
+aacgctccactgcacaatgggagtaggacttcaccaataattagcatctactgtaaacaa
+gcgccgtaacgaaatgattactgattgagaaaaataggtctcaacaacttttgacagata
+tgtatccgatacccaagcgttgctaattgcgcaaaagtaagtagaattacggtcgtatta
+cttgttgccaaatggttattactccaatgggctattctaatccgatggatacgtaggaga
+gagtgtacctacaccgaaactcgtagtgggcttagtggctacgtagaagctgttcgggtc
+agttacagcgtgcgaccttgtaaaatcgatcacggtgatgaattattgttattgtttaaa
+agaagtcccctgaatagcccttagataatacgaaaatttgttatgtccagtcgctcgtat
+atcaaaagattcggttaagttcgcagagttttgccaagtttacaggtgatttactaacac
+ttgggagggtacgtacaaccatcacctggttagcagagaatgaattatacggtcatgtcg
+cgaagggcaagtgtgtgagtattgaccgagttattaaacgtaaatgcaggcatttacgtc
+ataggacatcgagtttgtcctttgcgaaatgttaaatttatggttttttccgttgagtga
+taatagctgcaacatgaagatagtaaaactgaggttaaactttcaccatattaaattata
+tgttcaattacgcgatgtacaaactaatgttaatcagatttaggagcgcgcttaatatgg
+gtccctatcccgactttgtacgagattttgataaaaaatagtattgtaaattcatttgat
+ggcgtagaaccgggcaaaaccttgaaaaaggacacatttaggatgctatttccctaagaa
+agcggaaaatcctggctcaatatttataatagtaatggttaagattgtggcccaatcgct
+gagtacccgtcttacgctttttccaacacataatcgacgagaatgtatttaaatgtttga
+gacttacgttttccgcgtacttattattaaagtcattggagagggtgtcgtctgggtgta
+gttttctcatctgctcaggagctaaaaatgtaaatctattggttgtttctaattctgtcg
+tccgtgtaggctatttaatttttatggtacacttgaatatgtttagccataatgtagcca
+atactacaatatcagatacttgtatacgacctatagacttttgccgaccgctcgtagagt
+gatttagaaagatgttcggatagcacagcaatcgtttgcgaatgtaagcatgcgaagcga
+gtatttaactgttgactattttgctatatgttactctgaatgttgttttttttaccagaa
+tgtgttataatgatcaaccatgcacgttcctactaatcatataaattttgttacgtaagc
+ttttctatgatagtggtctaaagactacccttgcatactttaagattaagacatgcactt
+taggaggaactcacacgttttgagctgttctagcccacctataagccattcgtccgcaat
+cccataactacaatagtcggcaatcttttattacccagaactaacgtttttatttcccgg
+tacgtatcacattaatcttaatttaatgcgtgagagtaacgatgaacgaaagttatttat
+gtttaagccgcttcttgagaatacagattactgttagaatgaaggcatcataactagaac
+accaacgcgcacctcgcacattactctaatagtagctttattcagtttaatatagacagt
+atttgaaccaggcgctaatgttaaggcccccttcgaaaaccttgttatgttattccatgt
+ggtcggaggatttgcggggcgatagcgctgggcggggatcaacaatttcgttcatgcgag
+cgcccccataaccagtaggtacagttcggaaaagaaaaccccacgcactcgctagaagtg
+ttacaatcacatcacttcgtaccgaagggactactgtattccgtcttggggatgtaacag
+actgattacagtcttatgatgaagcctcattcatctaaaattagttgatttattccacgg
+atactatcacactcctatagaaagagttaccaccgtgggaagctagatataataaataaa
+agacatacaatattagtatggctcatgatctacacttactcggatctctctttttttata
+accagtagatcgcattacacgtattgttgttccgcatcaggccctaggggctcaaacttc
+catggtggataactaaaacgtccgtcactaaacgaagatattaatagatgaaatacacgg
+gtttacttgatttctgttcagtcattcacgggaaatcctaggagtctttcataacggcgg
+tcttagtaggaatgtagtcaagctctgtagaggtctcgacggaattggtatttcctggca
+tcacaatttacctagtattggagatcacttaaaataatgttgagataataatcaggatat
+ttctagtatgtgacaaacctctatttagtgattgtgattttcaattaaacaagacgtagg
+ggtcaaattaacgactacatgttggaaagaaggccgaattgtaatatctaactcatgtac
+taagaagaagtgctttcgtttaaggctttctgtctaacattctaacgtcaattcctatgt
+aatactactgtaaccaagttattactcggctgcgtagataaagtctcatgtaaatgacgg
+tttatctgttacttttgggtttcaacctagctaggacgccggtactaattacgacacctg
+cgtatagtgcagggtgttcaatgtgcctttttatgtccggattataaccatccctctccc
+acttggaatatcaccgggttcttaatgacttagttcgtcttccttattttccgggtaaga
+tcgctgtggaccggacccattttgatctagtctaaaaaggtatatagcgtttcgtctggc
+ccgcttacgttcactgaaacttagattaatcaatgcactgcactggattaacaagaacat
+gttatagtgtactgacacatgttagactaagaggtctgttcgggttagccgacttatatg
+tttaaccgattttgacaactgggttgagagataacaatgaagagtgaggactgtagaaga
+tcttaaaactgtaccatagtgctcaattcgctaatggcttgaattatttaattgttctaa
+ccctggcgtcgaatttttttggttcgaaaatacttagcacagcgtattgttcaacgagat
+gcacaactgtaccgttagaaagcggcttaatgacaaggcagtattgtgactattgacagg
+gaatcctaaaaagctactcgaattggtatatggaagaggtatgtactgagaggtcgcgcc
+tattagtcaaattctgccaaagaagagtcaaaagcttaactagtttgatggtatgaggtt
+taatgctaggtggtctataccaccaaaaagtatatgggatatcccagaatttatcgactt
+tcaatcgtctaccgtcacgacgtacactaggcagccctaatccaaaacttttgaggatga
+gtactgccactattatactgtaccatttgtaacttacattttatatcttcaaagaggtag
+atattgtcggccattactgtcacttacactaagggtagcttgattactgatacctctcat
+ggtaaaaagtaatttaagaacctatttttttacataacctctgctactaccgttagtgtt
+ttagtcggttcaagtcacaaaatccctgtagcgcacccctataagcagaaggaaacctta
+atgcggataaaaacttttgccggaaccgttaatcctatgagaataccactcttggaatcg
+gtcctttaggctgaggatatagaacgaggggaacgcatcaatctaggttaggtgagagaa
+ctttgtatcaaaacgcaagtaccatatgccgtcctcagtaaattgccaaatgcagaaatc
+ttacactcttttcttaactaagtatgagagcaacctcactcctgaacagcttgttaccta
+acgagaagaggctttaagtagcctggagcctcaaccggatatccggatttgactctcatc
+cacttacatgatgattacggtcattacatctcatgattttctgagtgccctatagactgg
+gaatttaatctaccctgtttctatttgttaacaaggagaaccactggtcaagatgacgcg
+cttccatttatgccaccataagtaagttctcggaacccttacatgattggcctaccaacc
+tatatatgtgaccaatgtacggtacatagagtgtggcctatcatattcaggtcatcgagc
+tcagtatttaaagattatatggtcgctgggggtattcagtgcgcgatggaagactaacat
+tggaaatcaacggaattgacaacacgctcactttaataacctatctcaggataagtttaa
+tgtaattagacggaactttctctaactccgtgtactaactctttgaaaataatgtgggta
+tttttatttcatctagatttgtctgtatcgaaagaaagtattggtccaaataatcctcag
+taaaatcaagtcataaatataaaatttagatcttaggacagaggaaagtgctttcccgag
+cataggatctggcctacgccagtagttcatgcttgtgttaaaagttgttactgtttatag
+tccgtactcagggtagtgttcgatactcagcggggaactgacatattacactaaggaatc
+aaggcccttcgtatgggtcatgtttatatatttaattacttacgctatttgatcgagaat
+agctatagtaacgtcgtaagaatgcaggatgcgattcgagtttgtaaattcacagatact
+gtgtatcatattattatagatgttaaggcatagaattattggtattgatgtacaaaaaat
+tatgggtgggcagtaccgataggcattacgagcagtgcagcttggaagaactggatgtat
+cctataactagtaagagccttaaaggtactacatacccagggatgttaccatcattaatt
+tggccatcttcaatcttcgcaatgcatactttcttctacaagatgccttttagaagacaa
+aataagtgtcaacaataacgctgtaacttaactctgttgtacgtggaatcaagtctcact
+aaagcaactaacattccgacatgcaaacgcaggactactagattattaaattcgccagcc
+cgcctcgtttaatataacatcataaaaattctaagtaatatctcacacactaatccgcca
+tcgtccatagcatcagtcacctgtcttacacaaacacatgtttaatcgatgttgttatgc
+caagctagtttcgcgaccatgtaactaattgtggaaagctgctaccttgaacgacatcaa
+ccatcctacctttgtacaacagaccaacatctctgtactggtaaatagatctgaaaagtt
+ataaatataactgttttcacattgatagaaaaacagctatgtgctatttgtatatactat
+aataaattaagcgaaacatggagattaaaacagtgttttctcatcctccacctcttgttc
+tgctaatttataattcttgatgccactcgtgtgagtcgtccattcgatcgtaaagaaccc
+gacataaatagatacgacgctgaacgagatcctatttctcctgaaaattattagcacggt
+aactcctagggatagtggtactagttggtatgaacgtataaaaacttgtactactttctc
+gggatgtgagggagcaaactattactcgaccagtgcaacgcattatcgacagtaaaagtt
+ttcagctgatacctgtctggatggattatatgcaggtaggcgagagtggattgtagcgat
+gctcggcgggggtattttaaaaatctaggtgataaaagtcctgtttagccaggaaaagtc
+atcattgcactgcatatcgtcgattagctgtcatttcgtccactggtaccagttcaacgt
+acatcaaagtccgggcgcatccatatcaagttttgcaatagtactccagaccatgaaatg
+gttatccagattaataataacttaatatactttcactacatactcagcgggtattaaatt
+tcactttatgtcaaaggactcttatgtggtcttcaaaaaggtctagagtctatcacgcct
+aattgtgtgaaaaccgagtaacttgatcagccttgtaaaatatagtagaatatgatgtta
+aatcatttatattccagggagattgaatagcttacgattagctggtataatttaactcac
+atgattaagcaaatatctgtaggaccgagggaaagaataaaataaagtaccatgagttcg
+gaacgctgcattacatggcgttgggctagcctgatacaagaagatgagtatggagctctc
+ttcatcgggacgtgacaaccctagcgtaatcttggcagatcccggagcagatgattatcg
+tctaacactgtctttaccaatgcacaacgcatagatttaacctgaactgttctggattca
+ctcctgactacagcctacaactcatttctatgcataactcttaaagacagtcgcaatatc
+agtacctctatacacatcggatcagactagatcataagataagtctcctctggatccttg
+tattctgttaagtacactacaaatttgtttagtgtctgggacaattacgataagggtcgc
+gactagaccacagggcatatgacctccaccgctcctagcgagtctccaatctgcaagcac
+tcatacgctaggggcatgaatcgactgtcaatgcactgtaagatttacgagggtgagacc
+catttagatatgcctcgtttaaccgttttaggcttgataggatgagtttgtcgatccatc
+aaattcccgacattcatattgtccaataagtatatctagcttattcggactcgctaaact
+aaattatggtataaatgccgtcaaccggtgcatttgttcaatcaacaaattatagtcaat
+ctcccatggggccttatggcagcgtatacagctggtataacgaccatatacaactatgaa
+cggactagctgtgaactaagcagattattggatccttgtgtataattttaagtttcgatc
+tatatgctatagtatagaaaatgttccgatcgtacgcttcctttacagttaaacagtcta
+tatcatgaagcttatccaaagctggacatttgatggcaatcttacttaattatgaaactt
+aattacctattattgaaagtatttatatgatcgaataagatttgctctataaacaggtcg
+tccattcacgacctagtgattgcgtaaattgaccaacctaggtaatctaaagcctgcatc
+tatttcttatcattcatgttatactgacccgttctcagtacttaaaaatgatcgtaagca
+agaatcactcacgctcatgtcacatttagtcgaaataaactgccgatgggaaggaagttc
+cgtcattgcgatatcgatgtctatcccacgcgtcattttcaaattggttatctacggata
+actgtgcgatgaactactataggtcaaaattatcttcaatctcattctagatcatataaa
+gatgtccttcgcgattgatacgtctacagtgtgttggtgttacacagagggtagcgacta
+cttacttactaactctctcttgatccgcaagcataagccaggttaaagtgctctatcttt
+ttctgtggattataatagttataccgccttgcatctaggtgcccattaggtaatgcccta
+gtgttttcataaatttactcctgccatctaacgttactttaatttcccagattcaatagg
+tctctcatttgaaaattgttatatgtcaacaaagaatataatagctgagtggaacaatac
+actgtgagggagtaatacatactctaaattttctttacggtttgcgcctgcacagttttt
+tttatctatgtgatccgcataaaaagtaatttcaacgttccattcaagttaagtcttggt
+gacactagcattaggagagatcaccaagaccattatttatttagctagggtttaagtcgg
+ttagaaatatcagataatgaggtctttatccggccttacgcagtagaaattggaaatttc
+gtaaagcactgagttcaatggaagtatggccgaacccacataatgcacaaatcaagtcga
+tttcttccgtccttttagtctcctgggaactacgggttattcatagttaagctaaatcag
+ttaacggaactagacaaatgtataatagttcccaaatatatatctataaatcttatgcag
+ttagggaatgcagatttgaatcatggcaatacgctagctcggaactcaactacaagtgtt
+ggatgtacgaattcaaaggtattacatccttatgatgttcttttttggatacttttatga
+cgacttccacgaagtgaaattatgttcgaatatctgaacagttacttggttgagcccaag
+gatgacgaatgttctgtttataattctcgtcataatataaatacaagcatatgaggccag
+tcatggagctttcatttggactaacatttccgtagagtcatatcacgcctgtaatctgat
+ccgtctttttctattcgaagtgttatcagatacatgacgcccttgcgtgacattcatggc
+tcctgacatcgggtcttttaggctgaatctaatctaacccaatttgtttggattgtgggt
+cctccattttgtctgttaatgcttattaagattaaaaatgtactacgtatttagacctaa
+tgattgcgatacgctgtggaccattaatataagctgcgccaggggatttttccagatcat
+ctggcctgtgtatatgttcaaatctaatagccgagagaaattactccgacggaaaataaa
+ggcagataagcgtttcagagcaccatcgtggcgtttagtcaacctttagttcggaattta
+ttaatatacaatctcactctttggacgagctccttaaaagatgcccttgtatatcatgtc
+ccgtacctaaaagtataccagcatcatcaaagaacagttaaggaatacgactgctctata
+attgtccgaggagtaccttctcatctgccaatagtcgttgggttggaaaacaacgcatta
+atatgccacacttgtcaattagaagtttctataaaggggacgagtaactgatttgagacc
+tagcacggcagaggacgttcgtgtgacaacatctctttataagtttgagataaaatcgct
+aatctacaatgattatttgccaatcattatcgaatgcgcaaagtatctcctgttcgtgat
+tctagcctaaggccattactatggtcaaattatgctaatcgaagcagtcttctaacaccc
+ttagaaaagcaaacactattgaatactgccgccgcattcgccagcaccaacataactgca
+cgtgcttttttccatgattggcattatgaaagatttgatctatgattcttaccagttgca
+atattcaatttagcatgtgttcctaattattgtgttattatggtctatctcatcatgtaa
+atgaagatcatgacgtcaacacagattctagtcaggatcatcagttcctcggggaaatcg
+cacctaggaacagccttatgcaaccgctaaacaaagcaatgaggatgtaccgacaaaagc
+tcgatttaaaagcctcgaaacgagatgtacgaatcgtttactgccttttatgaggagtcg
+agtactgttggttcatatttgctacatgattgtatgtaataacgatcccgccctttatcg
+gttcgatcctttatggcgataagttatgaatcgtcagtatctttagatcaaaaactcaac
+tagtacccagttccccggaggaacggtcatgattaatgcgttttacggtctcccgtccct
+cttcttgtcagaggaatcagtttcatccgatcccactcgatgattggtatagctatttgc
+cgaaaagccacaacgtattcggtactatcttgtttgattcccctgtatcttaattcgcga
+cacttgatatcttttgtgtttaatcgacgaatcatcctgggggcgacacttgttacaatt
+atccagttgcgtttaatggctgtgggtcacaagattgttagacaggtcccgcgtgtcgta
+ggaaattgataattggagtttgcaggacgaatagctcacccgcctaagtgatccaaccct
+catcaggataactatcactgggcagtattatttttgatttcatatgccaccccctaggag
+actgtagtcatgtatctttcttacccaatctagcccgaaacaagaaagaatgtcgattcc
+agtcaccttttattagaccgatttacacacaaagtgtcttggtttaaaggctggcatgaa
+tacatactcaaaagttgaaaacgacttgctctattcgattaccttcgcgatctcaatcga
+ttacgctaaattttaatgcccgctgaaatatccaacatttaaaacaggattaattctctg
+atccatgaacttaggactcattgcacgtgacttatctttctctcttaattcatgctccaa
+tacggtgggctaaaccacttttatcacatgaatgtacgcaacgtgttaataagctatgag
+tacgcgggggcagcgaaacgggtcaatctgggtatcttctattgggacggtacatttcgg
+ttttatagactatgtagttacacggcatcaacatgtaattaaaacggcgtaacctaggaa
+agccgaacgcaccttgggattgccatgtgtccggaggattacatacatctaagaaacatt
+ctaaactatgtatagtcgtttacgacccttgtagtacgtgcatcccttggcgaaaagtac
+tctgggtattagagtgtatattatcgacagcaccgaatcctcattttatagcttgacaat
+ttatgacccgaaagaaccttttataagtctataagtatatctaacgcaattgcggcactg
+agtccactaactatctttgagcagtgttatacagtgagacgccatggaaggggtttatat
+attttactgtcgttccctaaaaagttaattatcagacctgcgcgatctcgtagatgaaca
+acgcgatctagtcgaaaaatgcttgtggctaccattccagtcgagatcaaccgtttctgc
+ggatcgcgttacattccttgcttatttgcgataaatcgatacaaccccattaccagaaaa
+acccggagaatcaattactctgcagatcttatactaaaaaagagattacaacccctgttc
+tatgtgtcccaaagtgagtaacgtggagcgttggggtaagagcggagcgattttaacttt
+cgcttttccattttccagtattgtactttacgttatatttgagcggcacattcgtcaaaa
+catgatccatatggactgaggtgtttaaatgttaatcaaataattgtattttcagctgac
+tttaaaatctgcagccattggaggtggagattccaatagatgtaagcaggtgatatcata
+tgcaattcttgtgacttattaagataccagacacggcacaatcgcagtagcacgtaaaca
+ataatgacaatcgacggttaaattccgaacgtaagatatgtttacggatgcactaaaata
+ggtagcaacaacgtttctctgagatgtataagttaccaaacactggagaattccgctaaa
+ctaaggacaatttccgtcgtattaattgttgacaaatggttagtaatacattcgcagtgg
+ataatccgttgcatacctagcactgagtgtaaataaaaccaatcgactactggcatttcg
+ggctaacgactagatgttagcctatgtgaaagcctcacacatgcttattgccttcacggt
+gagcaatgtttcttattcgttattagaagtcacctgtagagacagtagagatgacctaaa
+tttggtttgtccagtcccgaggtgatctaatgattaggttaacttagaacagtggtcaat
+tggttaaagctgatttacgaacacttccgaggggtcgtaaaacattaaactggtgagaac
+agtatgatgtattcggtcatctagacaaccccatcgctgggagtttggacagtgttatga
+ttcgtaaatccaccatgtgtccgaattcgaaatcctgttgctccggggagatagggttaa
+tttaggcttttttacggtgtggcatattagctcaaacatcaacattcttaaaatcagcgt
+aaacggtcaccagttgatatttgttctgctaggaagcgatgtacaaaataagcttaataa
+gatttaggtccgaccttaatttcggtccatagcacctctttctaagtgttttgcttaaat
+aattgtattgttattgattttctgcgagttgaacacggaaaataagtcaaaaaggacact
+tttaggttcatatgtaccgatgaatgcgcaatagaatcgagaaatttttagattagtaat
+cgtgatgattgtggccaaatcccgcactaaacggctttcgctgtttccaaaaaattttag
+tccactaggtatttaaatgttggacactgaacgtggaagccgtcgtattatgaaactaat
+ggcagaggggctcctctgcgtgtactttgagcagatgctatcgtcagaaaaaggtaaatc
+ttttggttctttataattctggcgtccgtgtagcctagtgaatgtgtttggttcaagtga
+atttgtttagccagaatggaccaattacgtcattagctgttacgtctatacgaaatatag
+actgtggacgacccatcgtagagtcatgtagttacatgtgaccttagaacaccaatcgtg
+tgcgattgtaagcaggacaacacagtattgtactggtcaattggttcatagatctgacta
+tgaatcttcgtttttgtacaacaatctcggtgaagcttcaaaaagcctccttcctaataa
+tcagttaatttttcgtaaggttcctgttcgaggttagtcgtataaagacgaaacggcctt
+aatgtaacattaactattccactgtaggtggatctaacaaggttggacatgtgctaccaa
+taagataagaatttcgtccgcaatacaatatctacttttgtagcctatcttggattaaca
+acaacttacgttggtatttcaccggacgtatcaaatgattctgattttaatgactgagag
+taaacatcaacgaatcttatgtatctttaagccgctgcttgacaagtcacattactgtta
+gaatgaacgcttcattactacaaaacctaccaccaactcccacattaatattatactaga
+tgtttgaagtttatttgacaaaggttttcaaaaagcacagaatcgttacgaacacgtaca
+ttaaattgttagggtattaattgtggtcggtgcatttccggccccatagcgctccgcggg
+gagaaactatggccttcatgacagcccccccataacatctaggtaatggtcggataacta
+taaacaaccctctccagagaactgtgaaaataaaatctcttagtacacaagcgtatactg
+gtttaagtcttgcccatcttaaagactcttttcactattttcttgatgcctcattcttct
+aatattaggtgattttttaatccgagaatataaaaagacgatagaaagtgttaaaacacg
+gcgtagcgacatattttaaagaaatgaaatactttttgactatccctcatgatctaaact
+tacgcggagctatctttttgtataacatgtacagagaattaatccgatgcttcttccgat
+taaggacatagcgccgaaaacgtcatggcggcttatcgatatcgtaacgcactataccaa
+gtgattaagtgatcaatgaatacgggtttcgggatttctgttaagtcatgcacggcaaat
+acttggagtcttgaataacgccgcgcgtagtacgaaggttctcaagctcgcgtgacgtat
+agaccgtattgctatttcctgccttctcaattgtccgaggattgctgataacttaaaata
+aggttgagtttttaataacgatttgtcgagtttgggaaaatcctcgtttgtgtgtttgtc
+attttcaagttatcaagaactacgggtataatttacgacgtaatgttggtttgatgcccg
+attgcgaatatcgtacgaatggtatttgtacaactgctttcctttatcgattgctcgaga
+acattataaagtctattactatggattaagactgtatacaagtgtttaagcggagcccgt
+gataatctataaggttttggtacctttatctgttacttttgccttgaaacatacatacgt
+acacgggaatatttacctaaacgccgtatagtccagcctcgtatttgggccgtgttttgt
+cagcattttaaactgaaagcgcccacttgcattataacccggtgcggaatctcttagtga
+ctcgtcaggagtttacgcctttgagacctctcgacaggacccattttgatctagtcgtta
+taggtagagtgcctttcctatcgcaccattaccttctagcaaacttagagtattcaatga
+aatcatatcctgtttatactaaatgttataggctaatgacacagctgacactaagaggtc
+tcttcgggttacccgaatgagttgtttatacgatgttgacaactcgggggagtcatttca
+atgaagactgaggactcttgatcagattaaaacgcttaatgactgataatttagattatg
+ccgtgtattatttaagtgggcgaaccctcccctagaatgggtttcctgagaaaagtctta
+gaacacagtattctgaatccagatgcaaatcgctaacgttagtaagcggctgtagctctt
+ggcagtttggtcaatagtcaatcgcaatccgtttaaccgtctactattcctagagcgaag
+agctatgttctgacacgtccccaatattaggcaaaggctccaaaagaacagtcaattgat
+taactacgggcttggtttctccgtgaatccttgcgccgctataccacataaaaggatagc
+ggtgataccacaagtttgcgacgttaaagcgtcgaccctcaacaagtacactagcaaccc
+cttagcaattaattttgtccatcactactgccaagagttgactggaccagttggaaatga
+catttgatatattaatagagctacatattgtaccactttactgtcacttacactaaccct
+agcgtgattactcatacatatattcgtaaattctaagttatgatactagttttgtaaatt
+taatcggcgaagacacgttctcttgtacgagcttcaactaaatatttcactgtagccaac
+cactttaaccagaaggataccttaatgccgatataatattgtccaggaaacgttaatact
+ttcacaagacaaagcttggaagaggtactttacgatcacctgatagatcgaccggaacga
+ttctatataggtttggtctgagaaatttgtagctaaaaccatgttccataggaactcctc
+tgtaatgggcaaaatgcagatagcgttcaatcgttgcttaactatctatcacagcatcct
+aactcctcaacagcttctttcctaaagacatcagcaggtaagttgacggcacccgataac
+ccagagcacgattggaatctaatactctgtatggatcattacgctaagtaaatataatga
+ttttctgactcaaagttacactgcgaattttatattaactggttctatttgttaaatacc
+acaacctctcgtcaacaggtcgcgatgcaagtgatccaaaaatatctaacttataccaac
+cattacttctggcgcagaaaaacatagatatctgaacaatcgaccgttaagactgtctcg
+ccgatcttaggaacctaatactgctcagtagttattgtttatttgggccatccccggatt
+atgtcagccatggaacactaaaagtcctaatctaacctatggacaaaaagctcactttta
+taaaattgctcaccttatgttgattgttatttgtccgaaatgtctataactcagtgtact
+atctattggaaaattatggccggagttttattgaatatacttttgtatgttgagaaagaa
+tgttgtcgtaataattatcagctggaaaatcatctaatatatattatattgagatattac
+gacagacctaagtgctttcccgtcatgagcagatggactaacactcttggtaatccttct
+cgttttagttggtaatgtttagtctaagtaatatcccgactcttacttactcagagcgga
+aatgactttttaaactaacgtttaaaggcacttagtatgcgtcagggttatttttttaat
+tacgtacccttgtgcagagagtttagctattcgatcctacttagtatgaaccatgagagt
+acaggttggtaattcacagagaaggtcgagaagattatttttgatgtttaccaatactat
+gaggcgtattcatcgaaataattttatggctgcgcacttcacatacgcaggaagaccact
+gcagcttgctagatctggatgtatcattgtacttctaagagcctgaaaggtaatacattc
+ccagcgagcgtaacagattgtatggggacatattcaatcttagcaatgcattcgttcttc
+gaaatcaggcatttttgatgtcataagttctgtcaactataaccctggaactttaatctg
+ttgttcgtcgaatcaaggatcaagaaagcttctaaaaggcccaaagcaaaacccaccact
+acttcagttttaaattagaatcacaccctagggtattagataataattaaatgtcttagg
+aagagatatcaaaagatgcagacatcctcaagtgaataagtctccggtctttcacaaaca
+catggttaagcgatgtggttttgactagagacgttcgccaccatcgtaatatttctggtt
+acctgcgaacgtgaaccaaatcttacttcatacattgcttaaacagtacaacttatctct
+tatcctatagagatctcaaaagtttgtatttttactggtttcaaattgagagaaaaactg
+cgttctccgatttctatattattgtttaaatgatgccaaacatccagtttaaaacacggt
+gtgatcagccgactcagattcgtatcctatgttagaatgagtcatcaaactacggtcacg
+cgtacattacagagtaaactacacgaatgaaagagataagaagatgaaagagttaatagg
+tctcctgttaattatgagaaccctaactactacggattggcctactagtgggttggaacg
+gatataaaattcgactaagttcgcggcatgtcaggctcctaaatatgaagagaactcggc
+atcgaattatccacagtaatagttggaacatgattcctctatgcatggtgtatatccacg
+tacgccagtgtgcagtgtagccatgcgaccacgggcgttgtgaatattcttcctcagaaa
+aggactgttgagcaaggaattggattctgtgaacggaatatagtcgagtagatggaattt
+cctacactgcgaaaaggtcatagtaaatcaaacgccgcgcgcagacatatcttcttggca
+attagtactccactaaatcaattggttataaacttttagaatatctttatataagttcac
+tacttacgctgcgggtagtatatttaaagtgatgtcttaggaatcttatggcggcggaat
+aaacggcttgactatagataccctaattctggcataaccctgtaacgtgtgaagcatgct
+ttaatagacgactagatcagcttatagaatggatatgactgccacattgaagagattaac
+attagcgggtataatgttacgaacttgtttaacaaaatagctctaccacacacgcatagt
+ataatataaaggtcctggagttcgctacgagcctggaattgcagttcccctaccctgagt
+aaacaagatcagtatggacctatcttctgacccacgtgtaaaaactaccgttagcggccc
+tgagaacggtgaagttgattatcggctaacactcgctttaccaaggaacaaacaattgat
+ggaacaggtaagcggctggattctatcctgaatacagcataataatatttgctttcaata
+tatagttatgacactcccaatatcactaactctttacaaatcggatatgaagagtgaatt
+agagatggagccgatcgttccttgtattctggtaagtactcgactaatgtgtgtagtcta
+ggggtaaaggtccttaaccgtcgagtctagaactcacgcattatgaaatcctccgagcat
+agagactctaaattcgccaagcaataagtcccgacgcgaaggatgagaagctcattgaac
+tgtaacatttacgtcgggctcaccatgttacatatgcagcgggtaaaagtttttgcctgg
+agtggttgagtttcgcgatacataaaaggccccactttcatatggtcaaatatctatatc
+gtgctttggacgactcgataaactaaagtagcctagtaatgccctaaaccgctgcatttg
+tgcaataaaaaatttagagtatatataacttccggacgtatggctgccttgaatcctcgg
+atatcgtccttatacaacgatgaacggtatagctcggaactatgcagattaggcgatcct
+tgggttgaatttttagtttccatagatatgagttagttttgatatggttaccatacgtcc
+ctgcattgaaacttaatctgtatattgattgatccttagcaatagcggcacatttctggg
+caatatgacttaattaggttacggtttttactatgatggatacgttttatatgatagaat
+aacagttgctatttaaacaggtactacattcaactaatactgtttcactattgtgtccaa
+catagggaatatattgcctgaatagatgtattatcaggcatcttttacgctccaggtaga
+actaattaaaaatgatccttagaaactttcaagcaacataagctaaaagttacgccaatt
+ataagccacatcggtaggatcttcaggcattcccatatccttctctatcaatcccgtctg
+ttgctaattggttatctaagcatatcgcggcgagcatctacgataggtataaagttgctg
+ctatctaattcgtcataatatatacatggaattacagattcatacgtcttcagtctcgtg
+gtgtttctaagagcggacccaagaattacgtaatatctctctcgtgttacccaagaagtt
+gacacgtgattgtcagctatctttttctggcgatgttaatagttataaacaattgcatat
+agctgcaaattagctaatcaaatactcgtttcttaaatgttatcagcaaagctttaggtt
+ctgtaatttcactgtgtaaagagggcgctaagttcaaaattggtttttggcaacaaacaa
+tttaatagcgcagtgcaaaaataatatctcagggtgtaattatttctctaattggtcttt
+acggttggaccaggcaatgggttttttatctatgtgataccaattaaaagtaatttcaaa
+gtgacattaaacttaagtattgctgtcaagaccattacgacacttcaccaacacatttat
+gtattgtgctacgcggtatggcccgtagtaatttctgatattgaccgcgttatcagcaag
+tacgctgtacaaatgccaaatttagtaaagctctgtgtgcattccaaggtgcccacatca
+cacattatcaacatatcatgtcgttgtattacgtccttttactagcctgggaaataccgg
+tgattcagagtgaacataaatctctgaaagctactagacaaagctagtatagttaaaata
+tatatttcttttaatattaggatctttgcgattgcacatttcaagcatcgcattaaccta
+cctccgtactcttctacaacggttgcatgtacgatttctatgcgatgaaatacttatgtt
+cttagtttggggttactttgttcacctagtcctcgaacgcaaattagcttcgaatatctg
+aaaagtgtatgcgggcaccaaaacgatctcgattcttaggtttataattatagtcagaag
+ataaatacatgcatatctggacactcttccacatgtcatgtcgactaactttgaactaca
+gtcatatatagactgttatctgatccgtatgtgtctattactactcttatctgagaaagg
+acccaatggagtcacagtaagcgatcatgtcatcggggctttttccctgattataagatt
+acactattgctgtgcttggggcctcctactttttctatcttaatcattttgtacattaaa
+aagctaagaagtaggtacaacttatctttcccatacgagctggaccattaatttaacagc
+cgcaaggcgagttttaatgttaatctggaagggctttatgttctaagcttttagcactga
+gaaattaatccgtaggaaattaatcccacataacccggtaagagaaccttacgccccgtt
+actaataatgttctgcgcaatgtaggaagtgacaagctcactcttgcgacgagctcctta
+atacaggccctgcgttatattcgaccgtacctataactagaccaccatcttaaatgtaca
+gttatggttttcgacgcatagagtatgggaccacctcgaaatgctcagctgcaaattgta
+ctgggggtggttatcaaacatttaatatgaatctatggtaaagtactagtttatagatag
+ccgaacactaaaggtttgcagaccttcctcccctgaggaacttcgtgtcacaaattagat
+tgagaaggtggtgataaaatcgcgtatctacaatgatttggtgcaaatatttatcgattg
+cccaatcgttctactcgtactctttatagcctaacgccttttcttggcgctaattagcct
+aatccaagaaggagtctaacaaaattacttaaccatactcttgtctattcggcccacgca
+tgcgcaagctcaaaaagttctcaacgggcgtttttacttgagtcccaggaggtaacattg
+gatctatgagtcttaacagtggaaatatgatttttagattgtgttcagatttattgtctt
+attttggtctatctcatcagctatagctacataatgacgtcttaactgtttcgactaacc
+ttcagatctgactaccccaaatacaacatagcaaaagaatgatgctaacgcttaactatc
+ctttcacgatcttaacaaaaaagctccatttaaaagaatcgaaaacagatctaccattcg
+tggaatcaatttttggacgagtactggtcgggtcgtgcttatttgctacaggattgtttc
+gtataacgttcaagcactttagcggttccatccttgatggcgttaactgatgatgcgtaa
+gtttatggtgatctaaaactctactacgaaccaggtcccagcacgaaacgtcatctttaa
+tgagtttttaggtctccaggcactaggctgcgaagtggaatatgtgtcatcagagacaaa
+tagatgattcctatagctttttgcagttaagccactaagtaggcggttctatagggtttc
+attcaaatcgatcgtaattcccgactctgcatagcgtgggtcttgtatagaccattcttc
+aggcccgccacaatggtttcaagtttcaacttccgtttattggctgtccctcaatagagt
+cgttctcagggcacgactctcgttcgttattcataagtccagtttgatccacgaatacag
+aacacgcatatctgataataaaagcttaacgataactttcacgcgcatggtttatttttg
+atttattaggcaaccaaataccagaatgtagtcagcgatatgtagtaaaatttagacaaa
+cataaaacaaagtatcgccattacagtctcctgttaggagaacctttttatcaatatgtg
+taggcgtgtattggcgcccttgatttaataataattacggctaaacgtattgatattttc
+caggaactgccccatctcatgagatgaccctaaattttattcacacctcatttttaattc
+ttttatatcacgattatttatctgagcaagcatctttgcaagcattcatagtgacggtgc
+tgtctctatgaatgcatgctaatatacggtgcgctaaacatattggttcaattcaatgta
+agctacctcggaatttgcttgcactaagacggggaagccaaaacggtaaatcgccgtata
+tgctagtgccaagggacttgtccgttggagtcactatggagttacaagcattataaatct
+aaggaaatcgcagtatcagtccttaccccaaagatacttcgcattccctggggtacggac
+catgaaatacttctttcatacatgataaacgatggagactcggttaccaccctggtagtt
+actccatcaattggagttaactaagatcgctattacaggctttattagccaatcatcaca
+agcctctttttagagattcacaagttagcaaaccaaagttcctttgataagtctttaacg
+agatctatcccaattccggctaggagtaaaatttatatatttgagatcggggttaaagtc
+acacgcaatgcaaggggtttttatatggtaatgtccttccctaattaggtaattttcaga
+cctccgagagagagtagatcaacaacgcgttatactcctaaaatgcttgtcgataacatg
+acactacagatcatccctggatgagcatcgactttcattacttgattagttcagttaatt
+cgtttcaaaccattttcaacaaaatcccccagtagatatgtatatgcacatcttagacta
+aataacagttttcataccctgggatttgtgtcactatctcaggaacgtcgagacgtcccc
+tatcaccgcagcgagggtaactggccctgttccattgtaatcgatgggacgggacgttat
+attgcagacccaaagtagtaataaattcagccatatggacggagggggggaattgttaag
+aatataattcgattttcagctgaatgtaaaagctccagccattcctcctccacttgacat
+tagttcgaagaaggtctgagaattggaattgcttgtgacgttttttgtttccagacaagg
+aaatagcccagtaccaagtataatattatgacaatagaagcttaaattcacaacgtaaca
+tatctgttagcatgctctaatagaccgagaaaataagtgtctatgtgtgcgagaactgtc
+aattcacggcagtagtcacctaatctaacgtctagttcccgactatgaagtcttcacaaa
+tggttagtaataatttcccagtggagtagaagtggcataacgtgcactctctgttaataa
+tacctttagactactcccatttcgccagaacgtcttgatggtaccctatgggaaacactc
+acacatgcttattgcctgcaacctcagcaatgtgtcgtatgcggtatttctacgaacagc
+tagtgaaaggactgatgacctaattttggtttctcaagtccagacgtgatattttgatga
+ccgtatctgacatctctgggcaattcggttaacctctggtacgaaatagtccgtcgcgta
+ggtaaaaatgataatgctgtcatcactatcatgttttagctaagctacactaccccatcg
+ctcgcacgtggcaaagtgtgaggattccgatatcatccatgtgtacgaattcctaatact
+cttgctcagggcacttagggttattgtagcctgtgttaccgtctcgcatattagatcatt
+aatcaacagtcttataatcaccgtaatcggtaaacagttgttatttgttctgataggtag
+acagctaataaagatgctgttgaacagttacgtcccacctttattgccctacagtgaaac
+tagttcttactctgttgctgtaatatgtctagggttattgatttgctgccacttcaaaac
+ggaaattaagtcattaacgaaaatggttccttcataggtaaagatcaatccccaattgaa
+gccagaaattttgagatgtcgattcctgatcattcgccaaatttacagctcgtaaacgag
+ttccatgtgtaaaaaaatgttgagtccactagcttgtttattctggctcaaggtacgtgg
+aacacgtagtattttgatactaatgccagacccgctacgatccctgtactgtgagcagag
+ccgatcctcagaaatagctaaatcttgtgcttcgttagaagtctcgactacgtgtagcct
+agtgtttgtgttgcgttatagtctatttgtggacacagtatggtcaaatgacgtcttttg
+atctgacggcgttaacaaagatactctgggcaacacacatacttctctcatgttgtttct
+tcggacctttcataacctttcctggcacatggttagctgcacatcacaggattgtaaggg
+tctagtggttcagtgagcggaatatcattcgtcggtggtgttaatctatctcggtgtagc
+ttataaatgcatccgtaagaatattatgtttatttgtcggtacgttcatggtagtggtgt
+cgccgatttagacgtaaaggcatgtatggatcttgatctatgcaaaggtaggtccatcta
+tatacgttgcacagcggatacaaataagataagaatttactaacatttaaattttcttat
+tgtcgagcatagattggaggaaaaacttatttacttggtatttaaacggaagtttctaat
+gtttatgattggatgcacggacagtttactgcttactttcttaggtttcttgaacaacag
+gatgcactagtaacatgtctcgttcatgcttccattaagttcttcttaaacttacacaaa
+ctacctaatttagagttgacgagatggttgaacgtgttgtgacaaacgtttgcaaaatgc
+acagtatcgttaccaaaaagtacatttaagtgtgtgcgtaggaattctgctacgtccatt
+gcaggccacattcacatcccacccctgaatatatggactgaatcacacacaccaaatttc
+atctaccttatcgtagcataactattaacaaacatatacagacttcgcggtaaataaaat
+atattagtacacaaccgtatactggttgaactattgcccagctttaagacgcttttaact
+aggtgcttgatcaagaagtattattatatgacggcagtgtgtaatacctgaatagatata
+gacgttagattgtctgaaaacacgccgtagagacatttttgttagatatgtatttctttt
+tgacgagccagcatcttagtatctgaagacgagctatatgtttgtagaaaatcgactgac
+attgtatacgaggcggcgtaagattaaccaaattccccagaattagtaatggcgccttat
+cgatttactaacgatatataacttgtgatgttgtctgcaatgtatacccgtgtaggctgt
+gctcttatcgaaggaaacgcattgaagtccaggctggatgaaaccaccgcgtacttccat
+gcgtctatacatagcgtcaccgatactacgttttgctatgtaatccattctaatgggtaa
+gaggattcctcttatagtaaaatatgcttgactttttaagaaccattgggagtggttggc
+aaaataatagtgggtgtctttctcagtgtatagttttctacaactacccctattaggtta
+caagtaatctggctttcttgccacttggcgatgatagttagattcgtatttctacaacgc
+agttactgtatccatggcgcgagataattagatacgatttgaatttggatgtagactcgt
+tactactgttgtagaccagcacgtgagtatctagatgggtttgctaccttgttagcggac
+ttttgccgggaaaaagacatacgtacaaccgtatattttactataagcagtattggccac
+cctcgtattgcggcagggtgtgctcacctggttaaaatgaaagagaaaaattccatttta
+aaacccggaggaatctattactgacgaggaaggtgtttaacccgttgagacatctcctaa
+cgtaaaaggttcatattctagttattccgagagtcactttcctatccaaacatgaactga
+tagcataatgacaggttgaatggaaagcatatcctgtttattctaaatctgtttcgctaa
+tcaatatgctgtcacgaactcggagcttacccttacaactatgtgttctgtttaccaggt
+gctaatatcccggcactcttttcatgcatgtcgctcctagcgtcatctgatttaatagct
+taatgtctcatattttacagtagccagtgtagtatggaaggcggcgaaccagcccctaca
+ttgggtttcctgacataagtattacatatcacttgtctgattacacagcaaaatcgctaa
+ccttactttgcgcatgtagctattggaactttgggctagtgtctatcccattaagtttaa
+cagtagactagtccgtgagcgatcaccgagcttatgtctcgtacccaagttttggatttg
+gatcaaaaactactcgatattcatgatctacgggcttcctttctccgggtatcattgcgc
+cgagattaaaaataaaacgatagcgctgtgaaaacatgtttgacacgggatagcgtagaa
+actaaacaacgaatagaccatccaatttgaattttattgggtccagcacttcgccatagt
+gttgaatggtaaagttcgaaaggaaatttgttatattaattctgctacattttcgaccac
+ttgtatctcaaggacaatatcccttgaggcttttagcagaaagagatgccgtaattctaa
+gggatgataataggttgggaaatttaagagcagtagtaacggtcgcgggttcgaccttaa
+actatatatttaaatctagccaaacaagttaacaacaaccataaagttatgaccttatta
+tattggcaagcttaacgttttaattgctctagtaatagagtggtagaggtaagggaccat
+cacctgattcttcctccgcaaccattatatagacgtgtcgtctgacaaatttcgagataa
+aacattcgtccttagcaacgaatatcgaatggcaattagccacattgagttaaatagttg
+aggatatttcttgcacagaatcagatctaatctaatgattcgttactaaacacttcacca
+ggtatcgtgaaggctcaagattacccagagaacctttgcaatataagaatatgtatgcag
+cattaccctaagtaattatattctttttctgactcaaagtgacaagccctagtgtatatt
+aaatcggtatatttgggaaattcctcaaactatcctaatcaggtagccatgaaagtgatc
+aaaaaagttcgtacttataccatacatgaattctggccaagtaaaaaatagattgcgcaa
+aattcgtaccttaagtctctcgccaagatattaggatcctattactcatatcgtgttttt
+ctttattgccgccatccccggagtatctcacccatccttctcttaaaggcctaatattac
+ctatgcaaataaacatatattgttgaaaattgagaacctgatcgtgattcttatgtgtac
+catatgtatagtaatcacgcgactatatagtgctttagtatcgcccgtgggtgagtgaat
+attctgggctagcgtgagatagtttcttgtcctaatatttttcagatcgaatagcttcta
+tttttgtgtttattgacatatgtcgaaactccttactcagtgaaagtcatgaccagatcc
+acgaacaatcttcggaatcagtctcgttttacggcggaatcttgagtctaacttatatcc
+cgtcgcttactttctaacaccccttatgtatttttaaaattacgtttattcgaacgtact
+tggcggaagcgttattttttgaagtaagttacattgggcagactcttgacattttcgata
+cgactttctttcatccatcacaggactcgttcgtattgatatcagaagctcgtgatgatt
+agttgtcttctttaccaatactttgaggcctattctgcgaaatttttgttgccctgcgaa
+cttcacataccaaggaacacctcgcaacatgccttcatatccatcgttcattgtaattct
+tacacaatgaatcctaagtaattacatccctgcgtaaaagatggtaggggcactgaggat
+atattaccaagcatttagttatgagtaatcagcaatgtttcttgtattaagttctctaaa
+atagttacatcgtaatgttatctcgggttccgcgaataaacgagatagattcattatata
+tggccctaagcaaaaacctcctcgtattctgttggtaattagaatcacacaatacgggtt
+gagatattaattatttgtagtacgaagagatataaaaagatgaacaattactcaagtcaa
+gatgtatacgggatttataataaaaatcgggtagagatctgctttgcaattcagacgtgc
+cactaaatcgtaatatgtcgcgttacatcagaaagggtaactattattaattaataaagg
+gcttaatcactacatattagatcttatccgatagtcttatctattcgttgtatttttaag
+cggttctaattcagtcattatatcagtgctccgagttctttattattgttttaaggatga
+caaaatgcctcttgttataacgctgggagaagcagactaagagtcggagcagttggtaga
+atgaggctgcaaaagacggtctcgacgaatggacagactttactaaaccaatgaaagaca
+gaagtagagcaaagtctgaagtggtatcagcttaattatgacaacccttaatacttccct
+ttcgccgaatactggcgtggaaaggttttaaaagtcgaagtagttagaggcatctctcgc
+tcataaataggtagactactcgcaatccaatgtgactatgtaatactgggaacatcagtc
+cgcgatgcagcgtgtttatcaaccgtccccactcgcctggggagacatgagaccaccccc
+gtggggattattagtccgcagtaatcgactcttgacaatccttttcgattatgtcatagc
+aatttacgacagttcagcgaagtgactactcggcgaaatggtattactaaagcattcgaa
+cccacatgaatgtgattcttggcaatttctaatccactaaagcttttccgttgaatctgg
+ttgtagatatttatataagttcactaattaagatcacggtagtatattgatagtgatgtc
+tttgcaagaggttggccgaggaatttacggattctctattgatacaatttgtctggctta
+taactcttaaggctgaaccaggcgtttttagacgacttgatcagctgttagaatggtttg
+gactccctctttcatgtcagtaacatttcagccgttattgttacgatatgcttgaacaat
+attgatctaccacacacccatagtatattttataggtcatgctgttacctacgagcatgg
+tattccacttcccattcaatgagtattcaacatcactagcctcagagatgatgacccacc
+tctaataacgtcacgttgcggccatgtgaaacctgaacttgagtagacgatatcaagcgc
+tttaaattgcatataacatttgagggtaaagctaagcggatgctttatataatcaatact
+caataataagatttgattgcattttagagttatgacacgacatagttcactaacgagtta
+ctattcccagatctagactgaagtactgatcgagacgatccttacgtcgatgatcgttag
+ttatcgacttaggtcgggtctctagcggtattggtacttaaccggacactatactaataa
+cccatgatcaaagcataacagaatacagacgataatttcgccaacatatatgtacagacc
+ccaagcatgagaagctcattgaaagctatcattgaagtcccgctcacaatgtgtcttttc
+cagacggtttaactggttcccgggagtcctggagtttcgacttacataaatggaaacaat
+gtattttgctaatttatctatagcgtcatttggaccaatacagaatattatgttgcctag
+taatccactataacccgcaagtgctgatagaaaatttttagacgatttataaatgcccca
+agtatccctcccgtgaatcctccgttatactaattagtattcgttcatacgtataccgcg
+catatatgaacatttggcgataaggcgcgtgaattgttacgtgacagagatagcagtttc
+ttgtgatatggttaacagacgtacatgaagggaaactttatatctatagtgatgcttccg
+tagaaataccgccactggtctgccaatgatgaagtatgtagctttaggtttgtactatga
+ggctttcgtttgtttgcagagtataacagttgcgagtgaaaaaccgacgaatttatacta
+atacgctttcactattggctacaaaatagggaagagtttcaatcatgagagggagtatat
+ggatgctttgtagctaaaggtagaacgtatgtatatgctgccgttcattcttgaaagata
+cataagcgataagttacgacaattataagcaacatccctaccttcgtaacgatttcactg
+ttactgcgcttgaaatacactatggggctattggcggagagaagcagatcgcgccgagca
+tatacgagacctataatgttgatgatagagaaggcgtctgaattgatacatcgaagtaca
+ctttctttcgtagtatctctcgtcctctttctatctccggacacaagaattaagttatat
+atatagagtcttaccaatcatgttgaatcctgattctcagagttctttggcgggccttgt
+gatgactgagaaacaatgcaatattgctccaaatttcctaagcaaattctcggttatgtt
+atgttatcagcaaagcgttacgttatgttatttaaatctggaatgacggagcgaagttct
+tatgtcggtgtgggaataattcttttgaagacagcactccttaaataatatcgctccgtg
+tttgtatttatcgaatgggtctgtaaccttgcacaagcaaatcggtggtgtatatatcgg
+ataacaattaatacgatgttcatagtgacagtatactgatcgagtcctctaaagtcaatt
+acctcacttaacaatctcattgatgttgtgtcattcccggtatcgcccgtagtatgtgct
+ctgattgaccgagtgtgaaccaaggaacatctactaatgcctttgttaggtaagatctct
+ctgaattccttcgtgccaacttaaaacattatcaaaatttcttctacttggattaactac
+ttttacgagcatggcaaattcccctgtggaagacggttcattattatcggaaaccttata
+gaaattgcgtgttgactgaaattagatttttattgtaagagttgcatctttgcgattcct
+ctggtctagcttccaatgaacagtcctcccttctattcgacatcgggtccttcgtacatg
+tctttgcgatgtaataattaggttcggagtgtggccttaatgggtgcaactaggaataca
+acgcaaatttgctgacatgatagcaaatcggtatgccggcaccaaaacgtgctccttgct
+tagcttgtgaatgagactcagtagttaaataaatccatatctgcaatcgattccacaggt
+attgtccactatctttgaactactctaagagatacaagcttagctgagaccgaggtgtat
+atgactacgctgatatctgtaaggtaccaatgcaggcaaagtatgcgagaagctaatacc
+ggctgtttccagctttataagattaaaatttggctgtcctggcggcctcagaattgttct
+atcgtaatcagttggttcattaattagctaagtacgaggtacaacttatctgtcccagaa
+cagctccacaagtttttttacagccgaaacccctgtgtgaatcttaatatccaagcgcgt
+tatctgattagagtttacaactcagtattttatcagtacgttttgtttccaacattaccc
+ggtatgacaaaatgacgccacgtgtcgaataatggtctgaccaatgtaggaagtgaaaag
+ataaatattgcctacacatactgaattcaggcaatgcgttttattcgaaaggtcatataa
+ctagaaaacatgatgaattcttatcggatccttttactagcatagtgttggcgaacacct
+cgtaatgctcagcggcaaattggactgcgggtccttatcatacattttttttcaatatag
+gcgattggtctaggttagtgattccccaacacttaaggtttgctgacattcataccctca
+gcaacttcctctcaaaaattagagtgagttggtggtcttataagaccgttgattatttga
+ggtggtcaaatgatggtgcgatgcacaaatcgttataatcgtactctgtagacaataacc
+cattgtagtgccgattttgtgcataatacaagaaggaggatataaaaatgacttttcaat
+aatattggctattagcaacaagaaggagaatcctcattaagttagcaaccgcagggggta
+ctgcagtccaaggaggtttcattggagagagcagtatgaaaacggcaattatgattgtga
+gattcgctgaagattgtgtctctgattttcctagatagaataagctatagctacttaatc
+aactcttaactgtggagactatcctgatgatctgaataccccatttacaaaattccatat
+caatgaggctaacgcttaaatttcatttctccatcgtaacaaaaatcagcctttttatac
+aagacaaaacactgcttccattacgggtagcaatggttgctcgactactggtagcgtcgt
+gatgtggtgataaagctgtcttgcgtttatacttaaacaaattttgacctgacataatgg
+agcgacttatcggatgttgccgatctttagggtcatctattaagcttatacgaaaaaggg
+acaagcacgttacgtaatctggtaggactgggtacctagaaacgcaagaggaggcgaact
+ccaatatctgtaagaacagaaaaatacaggagtccttttcatttttcaagttaacaatat
+aagtaggagcttagagaggcttgcatgaaaatcgttaggaattacagaataggcagagag
+tggggcgtgtagactacattcttcaggccccacaatatgggttataggttaaactgcact
+ttttgcgatctcccgaaatactgtcgttctctgcgaaccacgctcgttccttttgctgta
+gtccacgttcatccaactattcagataaacaagatcgcagaattaaagcttaaccatatc
+ttgatagcccatcgtgtatggggcatgtatgtgcaaacaaaagacctcaatcttgtctgc
+gagagggaggaaaatttagacaaacataattcattctttcgactggacacgctaaggttt
+ggacaaactttgtatctatatctggaggcctgtattccagcccttcttttaataagattt
+acggcttaaactatggatatttgccaggaaatgacactgctattgacaggaacataattt
+tgattcaaacctcattgttaattattttatatctcctgtttttatatcagaatgcttctg
+tcctagaaggcatactcaaggtgagggctcgaggaatgaatcataatagaccggccccta
+ttaatattggttcaattctttcttacataacgcggaatttgattgcacgaacaccgggaa
+cacataaccgtatagcgcccgttatgctagtgcctagcgactgggaccgtggagtctata
+tcgtctttctaccattattaatctaaggatataccactttaagtcctttcaactaacata
+aggcgcattccatgcgctaaggaccttgaatttattatttcttacatgataaaagatcga
+gtcgacgggaacaaaaggctacgtactcaataaagtgcagtttactaagagccctttttc
+tggcttgtggagactatcataacatgaagatgttttgacattcaatagtttgcaaaacaa
+acttactttgtgtagtattgaacgagatctttccaattgccccatagcaggaatagttat
+atattgcagatcgcggtgtaacgcactccaaatccatcgcggtgtgtgagggtaagcgac
+ttaaagaattacggtttttgatcaaagcacagtgagagttgagcaaattacagttatacg
+acttaattcagtctccataaattgaaacgacacttcttaacgggaggaccagacacgttc
+attaagtgaggagtgcactttttgactttaaaaacatggtaatcaatttaaaccacttga
+tatgtatatgaacagatttgaagttatttctgttttaatacactgggagttctgtcaata
+tcgcaggaaccgcctgacgtcccctatcacacctcagagggtaaagggacaggggaaagg
+gtaatcgaggggtagggaacgtagttggcacacccaatggacgaataaatgctgccatat
+ccacggagggcgggattgcggttgattttaaggcgatggtaacctgaatgtaatagatca
+tcaaatgcctcctccactggaaattactgcgtacatccgctgagaattgcaatggagtgt
+ctcggtttttctttaaacaaaaccaaattgacaacttcatagtataatttttgcacatta
+caagcgttaattaacaaacttactttgctgttagctgcctatatttgtccgacaatataa
+ctggatatctctgcgagaactgtaaattaacggcacttggaacataatagttcctattgg
+taacgacgttgtaggcggcaattatccggtggaagaattgacaactgcagttgaactgca
+tgaaagtcaaatctctcgtaagtataactttagaagactccaaggtacccagaacctctt
+cagcggacacgatcgctatcaatcaataaggattattcactgaaaccgctcatatctgga
+ggtggacgtttttcttcgaaaagcttgtcaaaggactcatcaaatttttggccgtgctaa
+tcgacacacctgttattttcatgaccggataggacatctcgcggaaattcgggtaacagc
+tgggtagatataggacctcccctacgtattaatgataagcctgtcataactagcttggtt
+taccgaagagacaataaacattcgagcgctcgtgccaaactcggtgcattacgtttgaat
+aaatcggtaacatgtactattactctgcctaacggcacttacccgtttgggtccatgggg
+taaccgctcgatgttgacagaattatgctaaagtcgtttaagatcccgattaccgaaaat
+ctggttatgtctgagcattcgtacactgcgtattaagatcaggttgaacaggttcctaac
+aaattttgtgacctaaagtgaaactaggtcgtactctgggcatgttttatgtcgtggcgt
+atgcatgtgctgacacttctaaaaccaaattaaggctttatccaatatgggtccttaagt
+gctaaacatcattcacaatttcaagacagattgttggtcttgtcgattccgcatctgtcg
+ccaaattgacacatcgtaaaccaggtacatcggtaattatatgttgactaaactaccgtg
+tgtattctggctctaggtacggcgaacaagtacgatgtgcttaagaagccctcaccccag
+acgagcccgcgtaggtcacatcagcagatcctaagtaattccgttttattgtcctgaggg
+agtaggatcgacgaactctacaagtcgctttgtcgtgccttataggctatttcgggtcaa
+tgtagcgtcaaatgaactattgtcatctgtacgagttaactaagtgtctatcgccaacta
+aaagacgtctcgatggttctttatgcggacctgtcatatcattgactggcacttgcttac
+atccaaataacacgtttgttagcggatagtcgttaagtgtgcgcaagatcatgaggcggg
+gggggtaatatttcgccctctacatgataaatgaataagtaagaagatgatctttttgtg
+gcggtaccttaagcgtactcctgtcgacgagttactactaaaggaatgtagggttctgga
+tctatgaaaagcgacctccatatatatacgggcctaagcggagtaaaataagtgatcaat
+ggactaacattgaaatgttagtattgtcgaccattgagggctggtaaatcttatttacgg
+gcgtgggaaaacgaacgtgatatggtttagcatgggatgcaagcactcgttaatgcttac
+tttagttggttgcgggaacaacaggaggctatactaactggtagcgttcttgcttccatt
+atgttattattataattaaaaataagacatatggtagagttgtagtcagggtggatcggg
+ttgtctataacgttggaataatcaaaactatcgttaacaaaaacgaaatttaagtcggtg
+cggtggaatgcgcctacctcatgtgcaccacacattcacagcacacccctcattataggc
+aaggaagcaaacaaaaaaaagttaatcgaccgtatccgaccttaaattttaaaataaata
+gaaacacttagcggtaatgaaaagataggactaaaattcactagtatcctggaacgaggc
+aacagagttatctagatggtaacgaggtgctgcatcaagatgtatgatttttggtccgct
+gtgtggaatacctctattgatatacaagtgactttctcggtaataacgcacttcacaatg
+tgttgtttcttttctatgtattttgcaagagaaagaagcttagtataggtacacctcaga
+gatgtttcgtgtaaatcgtatcacatggtataactgcaggaggaacattatccaaattca
+ccacaattactaatccacccttttacttttactaaagatatattaattctcatgttgtct
+gaattgtataacccggtaccctgggagcgtatcgaaggataccaattgaagtcctcgagg
+catgttacaacacacgacttccttccgtctattcagacactcaacgagactaacttttcc
+taggtaatcaatgatattgggtaactcgtggcatcttatagttattgatccggctctttt
+gtagatcctgtgcgactcgtgcgctaattaagactggctctcttgcgcaggggatacgtt
+tattctacgtacccgatttggttactactaagcggcctttcttcaaacttgcagttgtga
+cttacattcctatttcttcaaagcagggaagggttacagggagagacttattgagatacg
+attggaatttccatgtacaatcgttaatacgcttgtagaccagcaactcagtatagagat
+ccgtttcctaaagggtgagcggtaggggcaaggcaataagaaattactaaaaccctagtt
+gttaatataagaacgattcgaaacaataggattgcccaagggggtgcgaacatggtgtaa
+atcaaagagaaataggcattgttaaaacccgcacgtttctagtacgcaagaggaacgtcg
+gtaaccagttctcaaagatcctaacctaaaaggggcttattctactttttccgacactca
+atggacgagacaaacatgaacggatagctttaggtctcgttgaatgcaaagaatagaatc
+gttattattaatcggtttccattatctatatgcggtatagatctccgagaggaccctgta
+aactagctctgcggtttaactggtgctaatagaccgccactatgttattgcttctagctc
+ctagcgtcttatcatgttatacattaatgtcgcatattggacagtagccaggcttggatg
+gatcgccgacaaaaagaaaagactttccctgtaaggacttaactattacatataacttgg
+atcattaatctgcaaattagagtaacggtctttcaccagcttcatattccaacgtggcgc
+tagtcgatatcccatgaagtttaaaactagaattggcagtctcacttcacagtgcgtatc
+tatacgacaaaagtggtcgatttgcataaatatcttatcgatattcaggttattaccgat
+tccttgctaacgctagaagtcacaccagagtaataataattccagacacctgtgaaataa
+tcggtcactacggatagactagtaacgataatacgtatagtccataaaagttgaatttta
+ggggctaaagatattagcaatactggtctagcctaatcgtcgatagcaaagggctgtgag
+gatttctcctacattttcgaccaattgtatcgataggaatagttacagtcacgcttgtag
+atgtaagagatgacgttattcttagggttcttaagtcggggggtaatttaagaccactag
+taaaggtagaggcgtacacagtaaacgatattttgaaatcgtcaaaaaaaagtttacaac
+atcctttaagttagcaactgattttagtggcaaccttaacggttgaattgatctactaat
+acaggcctacaccgaagggtacagataatgattcttactaccctaacatgatagagtcct
+gtcctatctcataggtcgacattttaaattcgtaatgagcaacgaagatcgtttcccaat
+ttgcaacattcacttatagacttcaggttatttcgtgctaacattaagatagaatataat
+cagtcgttaagaaactattatccagctttcgtcaaccataaagattaaaaactgaaactt
+ggcaagatatgaatagctatcctgctttaaccgatcgtatgagatgctttgtagcaagaa
+aagtgactagcacttgtgtttagtaaagcgggagagtgcggtaattaatattaatatact
+attaagctacacagcaaaggctgcaataatgttagtaagtagaacataaaggtattctcc
+acaagtaataaatagtgtgagctaattgactaacttaactctcgcgacaagtgatgtgga
+taagatgactcatatcgtctttttctgtagtgccgacatcccacctggatcgaacaattc
+cttctagttatcgactttgattacctatcctattaaacagatagggttgtaaagtcagaa
+aatgatcggcttgcgttggtctaccatagctagagttagaacgcgtagatagaggccttt
+tgttgccaacgtgggggtgggatgagtctgggcgagcgtgactttctttcgtgtccgaat
+ttgtttaacatccattagattagatgtttgtgttttgggtctgatgtcctaactactttc
+tcagtgaaactaatgtcatcatccaagtaaaatagtccgatgaagtctccgttttcggcc
+gaagcttgtctataacgtatataaagtcgctgaatttagaacacaccttatctatgttgt
+aaagttactttattccaaaggacgtgcacgaagcgtgagtgtgggaaggaacttaaagtc
+ggatcactcttgtcagtgtagataagaatttctttcatacttcactggaatccggcgtat
+ggatatctctaccgcgtcatctggtggtgtctgcggtaaaaagtcttgctgcacgagtct
+gagaaatttttggtgccatcacatcgtaactgtacaacgaacaaatagcatcaggccttc
+ttatccagcgtgaagtctaattatttcacaagctttcctaagtatgtaaatccctcactt
+aatgatgcttgcgccaatgaggatagaggacattgcatgtacgtaggactattctccaag
+gggtcttctattttgttagcgaaaattgttacagcctaatgttagagcggcgtacgactt
+tataccagatactttcattagatatgcaaatatccaattaaatcatagtagtatcgtggt
+atggacaatcaaaaaagacccgttgtgatatgatgtttttctagttcgttctcatatata
+tagatcaacaatgaataatctcatgatctataaccgatgtatatttatattccggttgac
+tgctccggtgcaattcactacggacactaatgactaatatggcgcctttcatcagaaacg
+ctaaatatgattaatgaattaagggagtattatctaattattagagagtagcagttagtc
+tgatattttcggtgtatgtgttagccgttataatgctgtctttttatcagtgagaacagg
+gagtgtgtagtgttgtatgcttcactttatgactctggttatatccctcggagaacaaga
+ataagagtacgagaagttcggtcattgaggatgaaatagaaccgctagacgaatggactc
+acgtttataaaactatgtatcacagtactacagctaactctgaagtccgagaagcttttg
+taggacaaaacgttataagtacctttcgcagaatacggccgtgcatacctgttataaggc
+gtagtagggacaccatgctatccctcatatagagctacactaataccattacatggtgac
+tatcgtttacggccatcatctgtaagcgatcatgcctcgttagcatccgtacaatctcgc
+atggcgtcactgcagaaaaaccccgtgcggattttgagtcagaactattcgaagcttctc
+aatccttttccattatggcatagcaagtgacgactcgtcagccatgggaataatagcact
+aatccgattacttatgaattagaacccacatgaatgtgattctgcgaattgtctaagaat
+ctaatgattttccggtgaatatggttgttgttatttattgaacttatattattaacatca
+cccttcgttagtgatagtcagctatttccaagaggttccccgagcatttttaccattctc
+tagtcatacaagttggagcgcttttaaatctttaggctgatcaaggcgttttgtctagaa
+ttctgcagatgttagattcgtgtgcaatccctcttgcatgtcagtaacaggtcacccgtt
+tttcgttacatatgctggtaaaatattcatagtaataactacaatacttgatttgttacg
+taatgctcgtacataacacaatcgtattccacggaacagtaaagctctattattctgatc
+gagcctaagagaggatcacactacgctattaaagtcacgttcacgaaatctcaaacctca
+actgctggtgaccagttatagacagtgtaattccatattacatgtcaggcttaagctaac
+ccgagcctttatataagctataatcaagaattagattggagtgcattttagacttatcta
+tcgaaatagtgatagtaagagtttatatgacctgatctagactgatgttctcttccacaa
+cagccttaaggcgtggagcctttcttatactattaggtcgcgtcgagagccctattcgta
+atgttaacgacactagactaatatacaatgagctaagaataacacaagtcacaagataat
+ttacaaatcatatatctacagtccacaaccatcactagcgattgcaaagcgttattggta
+ctaccgctctaaatcggtatgtgcaagacgcgttaactggttcaagcctctcctgctcgt
+gagactgaaagaaatcgaaaatatggatgtgcctaattgttcttgtgagtcatgtgcaac
+tatacagtttagtttggtcaagactatgcaactattaacagcatgtgcgcattgaatatt
+tggtgtcgattgataaatgccccaacgttccatcacgtctataagccgtgttactaatgt
+gtattagtgcatacctattcagaccatagttcaactgttggactgaaggcccgtcttggg
+gttcgtgaatgagagtgcagtttcttgtcttttccttaactgacctaaatgaaggcaatc
+ggtttatctagagtcatgcttaaggtgaatttcagccaatgggctcccattgagctagta
+tggtgctttacctttgtaagtggtggctttccttggtgtgctgactttaacacggcagag
+tgattatccgaagaatggataataagacgctggcaatattggctaataaagtccgatgag
+tttcaatcatgactgcgaggagatccatgcggtgtacctaaacctacatcgtatgtattt
+gctgacgttcattcttgatacataaagatccgatatcggtccactttgtttaccaaaagc
+cctaccttcgtaacgatggaaatgtgaatgagagtgaaatacacgatggggatattgccg
+gtgagtacaagttagaccacacattagaactgacctatattcgtcatcatagagatggag
+tatgaattgattctgcgaagtacactggctttacgagtatctagacgccgcggtatatct
+cccgtcaatactatgaaggtatatatatagaggctgaaaattcatgttcaatcctctttc
+taagagtgagtgggagccccttctgttgtcggagtaaaaaggcattattcctcaaattgt
+cagaagcaaagtatacgtgatgtttgcttagaacaaaagagttaccttagggtaggtaaa
+tctcgattcaccgagagaagtgattttggcggtgtgcgattaattcttttgatgacagat
+ctcattattttatatagctccctctttgtatttagagtttgcgtaggtaacctggcaaaa
+ccatatcccggggggagagtgcgctgaacattttatacgatgtgattactcaaaggataa
+ggttcgaggcctctatactcatggaactatcttataattataatggatcgtggctcattc
+cacctatccaaacttctttgtgatctgatgctacgagtgtgaacaaacgtacatcttcta
+aggaatttgggacgtttcatagctcgcatttcattcctgaaaacttaaatatttttaaaa
+attgattctactgcgaggaactaaggtgtagacaagcccttagtaaccggtggatgtcgc
+ttcagttttatagcaaacattattcaatttcagtcttgactgaaattagtttgttagtgt
+tagaggtccatatgtcacatgcatatggtctagatgccattgtacagtaataccttagat
+tagtattagcggcatgcgtacttggatttcacttgtaagaatgagcttaggacggtcgcc
+tgtagggctgcaaataggaatacttacaatttttgatgacttgttagcatatcgctatca
+cccataaaaaacctgatacttgatgagcgggtgattgagactatgtactgatataattca
+atagctccaatagatgaaacagctatgcgcctatttatgtcaaataatcgatgtgataca
+agcttagagctgaacgagcgcgagtggaattagcggtgatctctatcctaaaaagccacg
+aaatcgatcccagaagctaatacccgaggtgtcaagcttgagttcagttaaatttgcatc
+tcatgccccacgaagaatgggtagagagtttgaaggtgcttctggattttcctaagtacg
+tggtaaaaatttgatgtaaatgaacacctcctaatggttgtgttaaccacaaacccctgg
+gtgaatctgattagccaacccagtgatctgatttcagttgtcaaatctcttttttataac
+taccttttgtttccataatttaaccggatctcataatgaacaaacgggtagaataatggt
+agcacatagcgagcttgtctattcagaaatatggcctactcagaatgtattctccaaatc
+agtgttatgcgaaacgtaattttacgtgtaataatgatgatttcttatcggttccttgta
+ctacaatactcttgcccaacaaatactaagcataacagcaaaattcgaatccccctcctt
+ttaataaatggtttttcaatatagccgattcgtattcgttagtctttcaccaactattaa
+cctggcatctaattaataaaatcaccaaaggactctataatatgacagtcacttcggcct
+cttttaagacagttgattattgcaggtccgcaattgatggtgacatgcacaattagttag
+aatccgactatggagacaattaacaattgtagtgcccatttggtccagttgacttcaacc
+acgagttataaaggtattttaatttatagtcgatagtaccaacaacaagcacaatcataa
+ttatgttagaaaacccagggggtaatgctctaaatccagctttaaggccagagtgcacta
+tgaaatcgccattgatcattgtgtcattcgctgaacttggtgtctaggaggtgccgagtg
+agaatatcagataccttatgaagcaacgattatatctggactagatcatgatgatcggaa
+taaaacattgaaataagtccttatcaaggagcataaacattttatttaatttatacttcg
+taaataaattcagaattttttttcaagacattaatctgagtaaatgacggctagaaaggg
+ttcctactcgaatcgtagcctacgcatgtgggcagtaacctggcttgcgtttttactgaa
+acaaaggttcaccggaaagaaggctgccacttttagcttcttgacgatctttagcgtcat
+atttttagattagtcgaaaaacggaaaacaaacttaacgaagctggttgcacggggtacc
+gagaaaccaaagagcaggacaactccttgatcgggaagaactgaaatagacagctgtcat
+tttcattggtcaacttatcaatataacgaccaccgtagtgacgcttgcatgaaaatactg
+aggatgtaaactatagccagtcaggcccgcgtgttgactaattgatgaagcaaacaaaat
+agccggtattcgttaaaaggaacgggttgccagctacagatatactctaggtatatccca
+aacaagagacgtcctttggctgttgtaatcggtcataatacttgtcacataaacaagatc
+gctgaattaaacattaaacagttagtgatacacaatcgtggttggggctgggatgtgcaa
+taaaaagtcatctatcgtctatcacagagcgacgtaaatttagacaaacattattatttc
+ttgacaatggaatcgataagcgttcctctaacttggtatatatatctcgaccccgggatt
+ccagccattcttgtatgaagatttaaccatttaactatgcatagttgaatggtaaggaaa
+atgatattgactgcaacagattttggatgcaaaaatatttgtgaattattggttatatac
+tggttgtatagcacaatcattaggtcctagaaggcatactcaacctcagcgagagagcta
+gcatgcataattgtaccgcccatattaatattcctgaaatgatttcttacattacgccca
+atttcagtcatcgaacacccccatcaatttacccgatagagaacgtgatcatacgcaata
+ccctatgcgaacgtccactctatagcgtctgtatacaatgattattcgttccatttacaa
+cgttaagtaatttaaacttacataaggacaaggaaatccgcgaacctcctggaatgtatg
+agttatttatgcagttaacttcgtctcgaccggaactaaaggcgtcgtacgaatgaaagg
+ccacttttagaagagacctttgtatccattgtggagaatatcataaattcaagatggggt
+gtcatgctattcggtcctaaacattcttaatggctgttctattgttagtctgatttaaaa
+tggaaccatagcacgaatagttagatagggctcatacccctgtaacgatctacaaatcct
+tccccgggtgtgtgcgttagcgacggaaagttttacggtttgtgatcaaagaacactcac
+acgtcagattattacactgatacgaattatttcagtcgacagtaattgaatagaaactta
+ttaacgccagcacctgacacggtaagtaaggcaggtctgaactgtttgactgtaaaaaaa
+tggtaatatttttaaaaatcttgatttctatatcaaatgatgtgtagttttttctctgtt
+attaaaatcccagtgcgcgaaatttagatcgttacgactcacgtacaagatcacacatca
+cacgcgttagcgaaagcggaatggctaatacagccctacgcaacgtagtgggatcaacat
+atggacgaatttatgctcaatgagccaacctcccccgcattgcggttcattttaaggcct
+gggtaacatctatcgtttagataatcaaaggaatccgactatgcaattgtctgacttcat
+ccgctctcaagtccaatgcaggcgctacgtgtttctttaatcaataccatattgaaatcg
+taatacgataattgttgctattgactacaggttatgaaaaaacttactttgcgggtacat
+gcatatttttgtaccacattattacgcgatatctctcagtgtactctaaattaaaccctc
+ttcgaacattttagttcctattcgtaaacacgtgctacgcggcaatttgccggtcgtaga
+atggacaactccagttcaactgcatgtaactcatagctcgcgttagtataaattgactag
+tagccatgggacaaagtaactagtcagcggaaaagatccctttaaagatatatgcaggtt
+gcaagcataaagctcattgctcgaggtgcaccgtggtattccaaaagcgtctctatcgta
+tcttctaattttgggccgtgagaatcgaaactactctgatttgctgcacacgttaggtaa
+tatcgcccattttcccgtataagctccgtacttatacgaactacacgaccttttaagcat
+tagccgctcatatcgtgattcgtgtacagatgagtctattaaaattacagacatactcca
+tatctcgctccttgaactttgaataatgcgctaacttgtactatgaataggcagaaccca
+actttcccgtttgcgtcaagcggggaaacgatacatgttgtcagatttatgattatctag
+ttttagatcacgtttaccgataatcggctgtggtctgagcagtcctacactgagtattta
+cttcagcttcatatcggtccgaaaaaaggttgtgaccgaatgtcaaaatacggagtacga
+tgggcatcttttttcgagtcgcggttgcagggcagcaaaaggcttaaaccatttttacga
+tttttactatagcggtcatgaagtgcgaaactgcttgcaaattttctacacacattgtgg
+ctcttgtccttgaagcttatggcgaaaatttgaaacatagtataccagggaaagcgcgaa
+ttatttggtgactaatagtccgtgggtttgagccatatacctaacgccataaactacgtg
+gtgctttagatgcaatctaaacagaacagaaagcgtagcgctcatcagcacagactaact
+ttttcagtttgagtcgccggagggacttcgagacaagaacgcgtcaagtcgcttgcgcgg
+cacggattcgattgggcggctcaatcttgcctaatttctactattgtcagctgtacgact
+gtactaagtgtatagccccaaataaaagaagtatcgatgcgtctttatgaccaaaggtct
+tataattgaagcgcacttccgttcatcaaattaaatcctggcttacccgattctccggaa
+gtctgacctagagattgacgacggccgcgtattattgagacctcttcaggattaatcaat
+aacgaagtagttgatctgtttggcgacgtaccttaagccgactccgctacacgagtttct
+actaaaccaatgtagccttatgcttagatgaataccgtcctaattagatattccggcata
+acagcagtaaattatctgttcaatggacgaacattgaattgttagtattctacacaagtc
+aggcctcgtaaatattaggtaaggccgtgggataacctacgtgatatgcttgagcttgcg
+ttgcaagctctcgttaatcattaatttaggtgcgtgagggttaaacaccagcatattcta
+tatgctagacgtcttccttaaaggatcgtagtattataattaataataagaaatatggtt
+gacgtctagtcagcgggcatacgctgctctatatactggcattattcaaaacttgacggt
+aaaaaaacgaattttaaggcgctcacgtcgaatgagccgaactcatgggaaccaaaatgt
+cacagaaaacacctctttattgccaagcatgcaataaaaaaaatgttaatagtacgttta
+cgacattttattttataataaagagaaactattacacctattgatatgataggacgtaaa
+ttaacgagtagcctgcatagaggcaaatgaggtttctacatggtatagacctgatgctga
+aacatcgatgagttttggtcccctcgctcgttgaaatctagtcatttactactgtctttc
+gagctattataccacttcactatgtggtgtttctttgctatgtatggggctagtcaaaca
+tgatgactatagctacaactcagagagcgggcgtgttaagagtatctcatgctagaactg
+cacgacgaacttgatacaaagtaacaacatttacgattccacaaggtgactttgaagaaa
+catagtttaattctctgcttcgatcatttctataaaccggtaccatcgcagcggatagat
+gcataacatttctactactccaggcatcttaaaacacacgtagtacttcactagattaag
+acacgataagtgtataacttggcagtgggaagcaaggagattggcgaactcctggcatct
+gttacgttttgttcaggctcggttgttgataatgtccgactcctgccatattgaagactc
+gctcgagggagatcgggattcgttgattataagtacacgtgttccgtaatactatgaggc
+agtgattcaaaatggcacttctgacttacatgactaggtattattaccacggaagcgtta
+aaggcacactcttatggacttaagattgcaagtgccttcttctagcctgaattcgcgggt
+tcaacacaaactctctttagacatccgttgcctaaaggctgagacgtaggggcaaccctt
+taactatgtactaaaaaactagttggtaatttaacaacgtgtccaatcaagacgatgcac
+caacgcggtgcgaaaatcgggttaagcaaacacaaataggaattgtgataaaccccacct
+tgagaggtcgcaagaccaacctcgggaacaacggctctaagagaataacctaaatccgga
+tgagtagactgtgtaactctctaaagggaagtgaaaaaaagctaagcatacatttaggtc
+tcctgcattgcattcaattgaatcgtttgtattatgagctgtacagtagctatatcagct
+atagttatcccagaggaacaggtaaactagctctgagcgtgaaatccggatattagaacc
+cctagatgggattgattctagctaatacaggcttatctggttttacagttatctagatga
+ttggtaaggtgaaacgcttggtgccttccaccacttaaacaaaagtattgcccgggaagc
+tattttctaggtattataaagtcgagcattaatatcaatttgacagtaaaggtctttcac
+cagcttcatatgccatagggcccatactcgatttaaattgaacggtttaacgagtattgg
+aactctcacttataactgagtagctatacgaaaaatctggtccatttccagaaatttatt
+atcgatttgctgcttagtacccaggaagtgataacccttgaaggcacaacactgtaataa
+gttttcctgtcacatctgtaatattcggtcactacgcattcacgactaaagataattact
+atactaattaaaagttcaatgttagggccgaatcatagtagaaattctcgtctagcctaa
+tcggacttacctatgggctgtgaggatttatcagtatgtggacaaaaatgctagagatag
+gtatagttaaagtcaccatggtacatctatgtgaggaagtttgtagttcgcttctttagt
+ccgggcgtttgggatgacaactactatacgtagagccgtactcaggattagatagtgtga
+aagagtcaaataaaagggttaatattaatttaacgttgcaaatgtgtttaggccaaacat
+taaccgttgtagggatattctaatacaggccttcaccgaaccctaatgataatctgtctt
+aataacattaaatgattgtctccgctacgagctcttagggcctcattttaaatgactaat
+gtccaaagaagagactttcccaatttcaatctgtcacgtatagacggcaccttagtgagt
+catatcattaagatagaagattatcaggagggaagtttctattatcaaccgttacgcaac
+cataaacttttaaatctcataatggcattgagatcaagagctttcatgatggtaaagttc
+gtatgtgatgctggggagctagatatcggtataccacttcggttgtggtaagcccgagtg
+ggccgttagtaatattaatagacgattatccgacaatgcattcgctgaaataatcttact
+taggagaaattaatgctatgagccaaaactatttatgtctgtcacattattgactaaagt
+atctatcgacaaaactgatgtccataagttgtagcagatagtcggtgtatggtgtcacca
+atgaaaacctcgagcgaaaaatgaattatagttatccaatttgagtaaattgcctattat
+acagataggcttgtttagtcagataaggttccgcttgaggtgctctaacttagcgagagt
+tagaaagcctagtgagaggcattttggtgccaaactccggctcgcatgagtaggccagag
+agtcactttctttcgtcgaagaagttggtgaacagccttttgattagttgtttgtcttgt
+ggctatgtgctactatataagttagaacgcaaactaatctaatcagcaaagtaaaatagg
+accttgaacgagacggggtacgccgttgaggctcgagatagtagataaactagaggaatg
+tagataaaacattagctagggggtttagttactggattacataggaagtgcaccatcacg
+gtgtgggggttcgtacgtaaagtcgcatcaatattgtcagtggacttaacaagttcgtgc
+ataatgaaatcctatacggactttgcatatctctaccgactcatctggtcgtctatgcgg
+gtaattgtattgctccaagtggatgactattttggcgtcccagcacatagtaaatgtaaa
+tccttataatagcataagcaattattagactgcgtgaagtcttagtagttctcaagcttt
+acgttgtatgtaaataactcacgtaatcagccgtccccaaatcaccattgaggtcattga
+atgtacggagcactattatcaatgcggtatgcgattttctgagcgattattgttaaagac
+ttagcgttgagccccggaacacttgattacagattctttaaggagttatccaaatatcat
+tttaaataatagtagtatcgtgctttggacaataaaaaaagacccgttctcttatgttgt
+tttgcgacgtacttctctgatatatacttcaactatgaagattctattcatcgataaccc
+aggtatatttatatgcccgttcactgcgcagggcaaattatctacggacaataatgacgt
+agttggacccggtaagaactaacgcttaatatgattaaggatgtatgccagtattatctt
+attatgtcagagtagaagtttctctgagattttccgtcgttgtggtacaccggatttggc
+tctctttttagaactgagaactcggagtgtgtagtcttgtttccttcaatttatcaatat
+gcttttataccgccctcatcaactataacaggacgacaagttccgtcttgctccatcata
+tactaccgatacaccaatcgtatcaagtttagtatacttgctttctctcttctacagctt
+actcgcttgtccgagaagcggttggtgctcataaagttagtagtaaatgtacaactagta
+gccagtccttacctgtttttacgactactacggacaccatgagatacagaagttagtgct
+acaattataccattacatgctcaatatcgttgtcggccataagatcgaagagtgcatcac
+gcgtgtgaatacgtaaaatctaccatcccgtcaatgcacaaaaacacactccccttgttg
+actaacatcttttacaagaggctaaatcattgtccaggatcgaataccttgtgtacaatc
+gtcacccatcggaagaataccacttttccgatgtagtatgatttacaaaaaacatctatg
+tgagtaggccaattgtagtagaatatattcatttgaccgtcattagccttcttcttaggt
+tgtgtacggatagtaggtacataaaccgtcgtgtggcatacgctgcgatttcatacagct
+gccaacaccttttttaccaggctagagtcagaaaagttggagccatgttaaatagttacc
+atcataaaccactgttgtctactagtctgatcagctttcatgcctgtgcaagcaatatgg
+attctcacgtaatggtaacaactgttgcgttacttaggctggttaatttgtcagagtaat
+aaatacatgtcttgttgtgtttcctaatcctcggaaagtacacaagcctaggaataggaa
+aagtaaagctcttttattctgatagtgactaactcaggatctaaatacgcgattatacta
+accttcaccaaagctcaaaaatcatctgctggtgaccagttatagacagggtaattcaat
+atttaatgtctcccttaacatttcaccagcatggattgaagatagtataaagttttacat
+ggcagtcattgtgtcacggttctatacaaattctgatagttagacggtatttgaaatgtg
+cttctagcatggtatcttacacaactgaatgaacgactggagccgttcgtatactatttg
+cgagcctcgagaccccgtttcctaatgttaacgaatatagtataatataaattgtgatat
+gaataacacaagtaactacagtttggacaattaattgttctaaactaaaaatcattcact
+tcagatggcatagagttatggctactacacatataaagcggtatgtgaaacacccgtttt
+agccggaaaccctctactgctcgggacaatgaatgatttccaaaatatggatgtgcagaa
+ttgttagtgtgactcaggtccaaatagacactttagtttcgtcaagtcgttgcaaagttt
+aaaaccatcgcagcattctttatttggtctacattgagaaatgaaaaaacgtgacagaaa
+gtctagaagaactgtgaataatgtctattactgattaactagtaagacattagtgcatct
+ggtccactgaagcacccgcttggcgttaggcaatctctgtgaactgtcgtggctgttccg
+gtaatgtacgaaagcaagcctataggttgatcgagtcgcttcattaaggtcaatttcaca
+atatccgatcacattgtgctaggttcgtcctttaccttgcttagtgctgcatgtacgggg
+tgtcatgacttgttatcggcagactctttatcccaagaatggataatatgtacatggaaa
+gtgtccataattaagtcccttcactgtaaagaatgactgccacgtgatccatgaggtcta
+cagaaaccgacttacttgctttttgatcaacttaattatggattcataaagttcagatat
+cggtacaattggtgtacaatatgaaattaatgaggaaacatggaaatctgaatgacagtg
+atagaaaagatccccatttgcccggtcagttcatgttacaccactcattagtactgtaag
+tgtttcgtcagcattgagatccacgatcatgtgtttatgccttcgaaactggatgtacga
+cgatcgagacgaagaggtatatataacctaaatactaggtacgttgttagagagacgatg
+aaaattaatcgtcaatacgctggcgaacactgagggggacccaatgctcttctcggtcta
+aaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctttgcggagaacaa
+ttcacggaacgtagcgttgggaaatatcctttctaccacacatcggattttcgccctctc
+ccattatttattgtgttctcacatagaattattgtttagacatccctcgttgtatggaga
+gttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacctgaaattgtttt
+tagttgggatttcgctatggattagcttacacgaagagattctaatggtactataggata
+attataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcatatgtggctaaca
+cggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagagcgcattgaatta
+ctcaaaaattatatatgttgattatttgattagactgcgtggaaagaaggggtactcaag
+ccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagtctatttcagtct
+tctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcatatgcgattcatg
+acatgctaaactaagaaagtagattactattaccggcatgcctaatgcgattgcactgct
+atgaaggtgcggacgtcgcgcccatgtagccctgataataccaatacttacatttggtca
+gcaattctgacattatacctagcacccataaatttactcagacttgaggacaggctcttg
+gagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcgatgcgactagtt
+agggcatagtatagatctgtgtatacagttcagctgaacgtccgcgagtggaagtacagc
+tgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaacccagggggaaac
+attgagttcagttaaattggcagcgaatcccccaagaagaaggcggagtgacgttgaacg
+ggcttatggtttttcagtacttcctccgtataagttgagcgaaatgtaaacagaataatc
+gttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagtgtgagcatttca
+cttgtaaaatatctttggtagaacttactttgctttaaatatgttaaaccgatctaataa
+tctacaaaacggtagattttgcctagcacattgcgtccttctctattcagatagaggcaa
+tactcagaaggttttatccaaagcactgtgttgactaacctaagttttagtctaataatc
+atgattgattataggtgccgtggactacatgactcgtccacaaataatacttagcagatc
+agcaattggccaagcacccgacttttatttaatggttgtgcaatagtccagattcgtatt
+cgggactctttcaaataatagtttcctggcatctaagtaagaaaagctcataaggaagcg
+atattatgacacgctcttccgccgctgttttgaaacttgagtattgctcgtccgaaattg
+agggtcacttcaaaatttactgagaagacgaagatcgactaaagttaaaatgctagtcca
+cagttggtcaagttgaattcatccacgagttatatagctattttaatttatagtcgagtg
+tacaaaaaacatccacaataagatttatcttagaataacaacccccgtatcatcgaaatc
+ctccgttatggcctgactcctcgagcttatagcatttgtgctggcgctcttgccaggaac
+ttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatgatacgattttatc
+gcgactagttaatcatcatagcaagtaaaatttgaattatgtcattatcatgctccatta
+acaggttatttaattgatactgacgaaattttttcacaatgggttttctagaatttaata
+tcagtaattgaagccttcataggggtcctactagtatcctacacgacgcaggtccgcagt
+atcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggctcacaatgttac
+ctgcttcaccatagtgagccgatgagttttacattagtactaaatcccaaatcatacttt
+acgatgaggcttgctagcgctaaagagaatacatacaccaccacatagaattgttagcga
+tgatatcaaatagactcctggaagtgtcagggggaaactgttcaatatttcgtccacagg
+actgaccaggcatggaaaagactgacgttggaaactataccatctcacgcccgacgcttc
+actaattgatgatccaaaaaatatagcccggattcctgattagcaaagggttcacagaga
+aagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatcttcgaatcgggatg
+aatacttgtatcataaaaatgtgacctctagtatacaggttaatgttagtgatacacaat
+actcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatcactcacccacgta
+tttggtctaattatgttttatttagtgacaatccaatagataaccggtcctattaagggc
+tatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatggtaccagtttaat
+tgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgggcttgatataag
+atttcggatgtatgggttttataatcgttggagagctcaatcatgagctaatacatggat
+ttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagtttaataggccgg
+attggattgagttaattaagaccttgttcagtcatagtaaaaacccttaaattttaccga
+ttgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagtgactaggtatac
+aaggtttttgagttcctttgaaatagttaactaatttaaaattaattaacgacatggaaa
+tcacagaacctaatgctttgtaggagttatttatgctgtttactgcctctacaaccctaa
+taaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggtatccagggtggtc
+aatttaataaattcaacatcgggtctcaggatattcggtcatataatttattaagggctc
+ttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttgtgaggcatctta
+caccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaaggaaacttgtta
+ccttggggatataagaaaactcacacgtctcattattaaactgagtacaatttttgcacg
+agaaagtaatgcaatacaatatgatgaaagccagctaatgaaaagggatggaacgcacct
+cggatctgttgcactggattaaaatccgattatttttaaaaatattcagtgctagagcat
+atcaggtctacttttttatctggtatgtaaagcccacggagcgatagtgagatccttacg
+actcaacgaaaagttataacataactcccgttagccaaagcccaatcccgattactgccc
+taccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtgactacctcccac
+cctttccccttcatttgttccactggggataagctagcgttttcagaatcaatgcaataa
+gaatagccaattgtctcacttcatcagagctcttggcaattccaggcgctacgtggttct
+ggaatatattcatttttcaaatagtaatacgtttagtgttgctattgtctacacgtttgg
+atattacgttatgtgagcggacatcaatagttgtctaactctttagtaagccagagatag
+cactcttagcgaatggataccatcttccataagtttagttaatagtccgaaacaactgct
+tcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaatcttactaatag
+atagagtttgttttaagggactactagaaatgggacaatcttaatagtatgacctaaact
+gacatttaaagatatatccaggtggcaagcataaagatcattgcgccacctccaccgtgg
+gattacttatcagtcgatatcctatatgctaagtttgcgacggcagaatacaaactaagc
+tgagttgatgctaaccttacctatgataccccattggaccggttaacagccctacttatt
+ccaaataaaagaacttttatgctgtagaagctattatagtgatgcctggtaacttcagta
+tattaaaatgacacacatacgccatatagagctcctggaactttgaataatgagcgaact
+tcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccggtaaccagacat
+gtgctatcattgatcattatcgaggttttcataaccttgacccattatcggctgtgcgcg
+gacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaataaggttggcaa
+agaatcgcataagacggacgtagagccgcagcgttgtgcgagtccaggtgcatgcgcagc
+aataggattttaaattttgttccatttttaatttagccgtaaggatgtccgtaaatgatt
+gaaaattggattcaatctttgggcctatgctactggaacctgatcgacaaaatttcaaac
+atacgttaactccgaaagaccgtatttttgcggctagaatagtcagtcgcttggagccat
+ataccttaccacttaaacgacgtgctcctgtagttgaaatataaacagaacacaaagact
+accgatcatatcaactgaagatctttgtaactttgaggcgaagcaccctcttcgagacaa
+ctaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaatcttgacgaatt
+gctaagaggctcagagctaccactgtaatttctctagagcccataataaatgaacgatac
+atccgtaggtagcacctaagggattataatggaagccaaatgcagttaataatattatat
+actggcgtacacgattcgacggatctctcacatagtgattcacgacccccccctttgatt
+gacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgccaccgtaaggat
+gacgtcgaagctacaactgggtataatttaccatgcttccctgatgctgagtgcaataca
+ctaagaatgagtttttaccccatatcaccagtatttgttctgttattgcgaagaaatggc
+tatgctgagttggcgactaaagtcacccatcctttttattaggtaaccccctcccttaaa
+ctaactgatttgctggagctgccctgcatacatatactttatcatttatggacgtccgtg
+acgcttattatccaccatagtcgatatgctacacggattcattaatggatcgtaggagtt
+taagttatatttactaagatcggtctcggctactatcccgccttacccggcgctatttac
+ggccatttttaatatattgacggtaattattcctatggtttcgaccgcacgtccttggac
+aagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccctaccatcatata
+aaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaagactatctattaca
+ccttttgttttctgtcgtagtatattaaagtctagaagccttacaggaaaatcagggtta
+tacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccatcgcgccttgtaa
+tcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatctcggctttatgt
+gattgggaggggcctactcaaacatgatgacttgacctaataatcactgtgcgggcgtct
+tatgactagctattccttgaaatccaccaccaaatggttaatatgtaaaaactttgacga
+tgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgagcattgcttgtaa
+aaccgtcaatcgcacacgttacttccataaaatttctacgaatacacccttcttaaaaaa
+aacgtaggaattcacgagtttaacaaacgataactgtataaagtggaagtccgaagaaag
+cagatgcccgaactactcgaagatgtttcgttttcttaaccataggggcttcttaatggc
+ccactacgcacattttgttcaagcccgagagggacatccccattacgggagtattactaa
+aactgttccgtaatacgttcagcaagggatgaaaaaggccactgctcaagttattgacgt
+gggagtattacatcggaagcctgaatcccacactatgatggtctgtacaggcctagggac
+tgcgtctagacggtattaccggcttctaatcatacgatcgtgagtcttaacgggaagtaa
+ggctcacacctaccccaaaccatttatctatgtaagtataaaattgtgcgtaagtgttca
+aagtggacaataaagacgtggcaaaaacccccgcacataagccgctttagatttcacaaa
+taccaatgcggttaaaaacatccttgagtcgtacatacaccatactcgcgttaaacggat
+ataacagaagataataaatccggatgtggagtcggtgtaactatagaaagccaagtgaaa
+taatgcttaccagtcatttagctatacggctttcatttcatgtcaagagggtggagtttg
+acctgtacagttgatatatcaccgatacttagaactcacctaaagctaaaattgctcgca
+gcgtgtaatccgcatattacaaacaatagatgggattcattatacataagacacgatgat
+ctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgccttacaccactt
+aaacaaaagtattgacagggaacctattttcgaggtattatatagtccagcttgaatatc
+aatttgacagttaacctagtgaaaatcagtaagaggaaatacgccacattctccagtgaa
+attctacgggttatcgtctagtccaactatcaattataactcacgagatataagtaaatt
+ctcgtacttggcctgatttttattatactttggatccttagtaaacaggaagggagaaac
+cttcaacgaaaaacactggattttgttttactctcaaagctcttatatgacggaaatacc
+ctgtcaagtcttaactttattactagactaatgaaatgggcttggggtggccagaatcat
+agtacaatttagcggatacactattcggactttcctatcggctgtctggttggataagta
+tggggactaataggctagacatacctatacttaaactatacaggcgtcatctatctctgc
+aactttggagttccctgatgttctcccgccctttgggttcacatcttctataccgacacc
+cctaataacgattagtttgtgggttagagtaaattaatacggttaatattaatgtatcgt
+tgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatgtcacgaagtata
+actaccctaatgataagctgtaggaataaaattaatgctgtctctaagcgaagagatatt
+tccgactctgttttaatgacgaatctcattacttctgacttgcaaatgttcaatatggca
+cggtttcacggcacctttgtgacgcatataatgaacttagaagattataacgacggaact
+ttatatgataatccgttacgattaaagaatctgttaaatatcataatggcattcagttct
+agaccgtgcatcatggtaaacttactttctctgcatggcgacatacatttcgctattcaa
+attcgcgtgtggttacacccactcgcacctttggaatattaagagaagatgatcagaaaa
+tccattcgctcaatttttctgacgtacgtctaatttatcctaggagacaaatcgttttat
+gtctctcacatttttgaagaaaggttcgagagacaatactcaggtcctgaactgctagaa
+gatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatgaatgatacttttc
+caagttcagttaagtgaatatgtttaacatacccggcttttcgatcttaagctgacgctg
+gacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtttcgtcaaaaacg
+ccccctcccttctcgagcccactcacgctatgtattgacgcgaacttgttcgggatcaga
+cttttcaggagttcggtcgcgtgtccctatgtgctaatatataagttagatcgcattaga
+tgctaatctgaatacttatagacgaccttcaacgagaacgggtaccaccttgaggctaga
+gttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggctttagttaagggt
+ttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcgaccatctagaggc
+taaggggactgtactaggtagtgattaatgatatcctagacgcacgtgccttagatcttc
+agactctgatggtccgcgatcaccgtaattgtagtcctccaactcgatcactttgttggc
+gtcaaagaaattacgatatctaaatacttataatacaataaccaaggatgagaatgactc
+atcgcgttggagttatattgcttgaagttctatggaatgaaagcacgttatctgccgtcc
+caatatctccagtgagctaattcattggacggtccactttgatcaatccccgaggagatg
+ttcggacactttagtctgtaacacttagcgttgagaccacgaacaattgattactcagtc
+ttgaaggtgttttccaaagttcattttaaataagactacgataggcctttcctattgata
+taaactacccggctctgttgttcgtgtgagtcgtacttctctgtgtttttctgattatag
+caagattcgattcttagtgtaaacagcgatttttatttgacccgtcaatgagaagcgcat
+aggatctaagcaaaattatcaagttgtgccacaaggtaagatctttccagttattgcagg
+taggatgtatcccacgttgatagtatgaggtctgacgtcaactgtctaggagagttgacc
+gcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcccactgtcgtggc
+ggcgttcctgatatttagcaagaggcgttgataaagccctcatcatctagatctcgacct
+catctgccctcttgctccatcattttctacacagactactttcctatctacgttagtata
+attgctttctatcttagtatcatttagagcttctccgtcaacaggttcgtgctattaaag
+ttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcgactacttcgcaca
+aaatcagataaagaagtttgtcattctattagacattgaattgcgcaattgacttgtacc
+acttatgatcgaacactgaatcaagactgtgattaactaaaatagacaagccactatatc
+aactaataaaaacgcccctggtggtcgaacatagttgactacaggataattaattggact
+ggagccattacattctctacaatcgtatcacttcccaagtagacaactttgaccttgtag
+tttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaatagtttcatggga
+acctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgataaagtcgtgtcg
+ctttcgatgagagggaattcaccggaaaacaccttggttaacaggatagtctatgtaaac
+ttcgagacatgtttaagagttaccagcttaatccacggtgctctactagtatcatcagct
+gtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacggttgccgtactga
+gcagccttattgtggaagagtaatatataaatgtagtcttgtctttacgaagcagacgta
+agtaataatgacttggaataccaaaactaaacatagtggattatcatactcaagaactct
+ccagataaataacagtttttacgatacgtcaccaatgagcttaaagattaggatcctcaa
+aactgatacaaacgctaattcatttgttattggatccagtatcagttaaactgaatggag
+tgaagattgtagaatgttgttctggcctcgcatggggtctaggtgatatacaatttctca
+tacttacacggtagtggaaatctgattctagcttcgtagctgactatactcaaggaacca
+ctgctcaaggtaggagactagttccgaccctacagtcaaagtggccgaagcttaaactat
+agactagttgttaaatgctgatttcaagatatcatctatatacagtttggacaattatgt
+gtgcgaaactaaaattcatgctattcagatggatttcacttatgccttagaaacagatat
+tgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagggacaatgtatct
+tttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataatagaatcttgtg
+ttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttggggtctactgtg
+tgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagctcgagtactcatt
+aaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttcccggtacgctatct
+ctctcatcgggaggcgatgtgcaggttatctacgaaagcatccctttacgttgagagtgt
+cgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgtgcctcagggtcc
+gggcgtactcctccatggaagggcgcgcatctagtgttataccaactcgctttttaacta
+ctatgctgtagttctacaggcatagtggccagtattttctaacttctctggatagatgct
+ctcactcctcatccatcacggcttcagtttacgtcttacttgcttgttcagcaacggatg
+gaggcattaagtatcttcactgttccctaaaattgctgttcaatatcaaagtaaggacga
+tacagggaaagctcaagcacactcattgaatactgccccagttgcaacctcacttaatct
+gacaaaaataatgactactctaagtgttgcggaagcagtctcttccacgagcttgtctgt
+atcacttcgtataggcatgtaactcgatagacacgaacaccgagtgagaaactatattct
+tgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctggagatcactcacgc
+ccacacaaggcgctgctacctctttattccaatgtgtaagaatttgctaacttcatttct
+agaccgcagctttgcggtcataatttcacggtacggacccttgggttagagacttgataa
+cacacttcgcagtttccaccgcgcacatgttttagtggcttctaacatagaatttttgtt
+gtgacataaagagtgcgtgggagacttgcccgaccgttaagccataatcaattgaaagcc
+ccgtgagtcacatctaattggttgtactgcgcatttagctatcctttagctgactcgaag
+agattcgattcctaatataggttaattagatggctgccgcgcgaagtaaaacgtgaaaaa
+cgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagttccaagttcgct
+acgttatgagagagattggaattaagcaaatatgttttatggtgattttgggatgagaag
+gactgctaagtacggctactaaacaaatttctaaaaccgccatctaccttatcttggaga
+catttaagttgtatatgtcactagtctagcttttgtctgtgggacgcgttctcggaatga
+gggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtggactattacacc
+aagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaaggtaccccgcat
+aagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaaaacataatttta
+atcagaaggcagctcacccgcttgctctagatcttatctttgtatgaatgtcagaattta
+ctgcaatatccgttccgaatagtgagggcttagtatagttctctgtatacaggtcacatc
+aaactccccctgtcctagtacagctctgagctttaattaattgcatacatttccttcaat
+catcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaagagaagcaacaaac
+aactagcccgactcacgttcatccgccgtatccttgttcagttcttactccgtattaggt
+cagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcccgcttgaggttg
+acaattaaaacgctgagcagttatcggctattagatagtggggtgaaagtaattggctgg
+aattatgttaaaacgtgatattaagctaaaatacgctacttgttgccgacctaattcagt
+cattcgatattcagttagagccaagaataacaagcttgtataaattgaacggggtgcact
+aaacgatgtgttactctaatattcagcttggagtatacctgaaggcgaattcatgtatcg
+gccaataataagacgttgaagatcacaatttggactagcaaaagaaggtgatttatgcgt
+ggggattgagtccactgtacgagtacggtctctggaaaattataggttcagggaatataa
+ggaagtaaagataattaccaagagatttttggtatcgctatgacccagaggtgttctaac
+gtctgttttgatccgcagaatttctgcctcaatgcatatttgacggacttgaactagagc
+ctctaaagttaaatggcgacgcaactgttcctaaacttcaattattactactcttttttt
+cctagggtattgtagaggccagtggacaaaataaatcaaatttaagatgtttcggacatt
+aacatcccccgtagcatagaaatcatcagttatccaatctctcatcgagcttttacaatt
+tctgctggcgctatggacagcatatgccgcgagacctccgcaagactcacttgatcactg
+taagtatcttcattagaggttagagcctatagttaagctgctgacctagtaaaattggta
+ttttctaattttattgctcaagttaaaggttagtgaagggataatgacgttatttttgaa
+caatgggttgtattcaattttatatcacgaatggaacccttcattcccggcataatacta
+gacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtttaattccggcaa
+accaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatgagtttttcagga
+ctacttattacctattaataagttaacatgagccttcataccccgtaagacaatacatac
+tccaccaattagaattctgagccatcttatctttttgtatcatcgaagggtatggccgaa
+taggttaattagttactcctaacgtctctacaggcatgcatttgacgcaccttcgaaaat
+agtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatagtccacggtttcc
+ggattaccaaacgcggcaaagagaaacattgtatcgacggagataacttaatacagaagg
+aaggggcatcttcgaatacggatgaataattctatctgtttattctgacatcttgttttc
+aggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaattattttctaata
+ttgacgagagcaatctcactccttttgggtctatttatgttttattgaggcacaagccta
+tacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtggaaacaaaggatg
+ggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaaatcagatgctat
+ccttaactttgggctgcatttaagatggcggttggaggcctgtgagaatcctgcgtgtca
+tctttaatgaccgaattcatccatgtagattcagatcacacactcattccttgatgttgt
+ctaaacaaaagttgttgtggacgcattggagggagttaagtaacaacttgggatcgcata
+cttataaaaattatatgttaaactttcacaaacgctgaagtccaaagtaactagcccaaa
+cgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaatagtgttcgaagg
+taaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgcacggaggtatga
+tgtttactgactctacaaccctaattttccagtacgtacattcattccaataggttagtt
+ctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgctctatggatatta
+gctcattttatttaggaagcccgcttagaggcttactatgagggaaatgccaaaatgtca
+tacttttcggtgtgtcccatatgacaccgctttacatagaatttgaattaaaacgcgctc
+tcccgttcactaccatacttggtaccgtgcgcatattacatatagatataggatcatttt
+ttaaagctgtactaggtttgatcgacaatcttatgctatactatatgatgtaaccctcat
+aatcaataccgatcgtacgatcctagcataggtggcaagcgattttatgccgattattgt
+gttaaatagtctgtgagtgtgattatcagggctacgttggtagaggggttgtatagacct
+cgcacacattgtgacatacttaacaatatacgaaaactgatataataaatccccttaccc
+aaacaccaatcccgttgaatcaactaccataacgtctcccatataaattgcctacttgtt
+tgcataaatctgaatacataacaccattgcaccttcttgtgttccaatcccgttaagatt
+gccttgtcagatgatatgcaagaacaatagcatttgctagcaattattaacagctcttcg
+aattgcctccacataacgcgggagggtatattttaatttggcaaatactaagtactgttg
+gcgtcatatgctattaacggttggatattaagttatgtcagccgtaagcaagagtgggcg
+aaatattttgttacccagtgagagcactcttagagtttggatacaataggccatatgttg
+acttaagaggacgtaactacgccgtacaccattgttcaaccgacttcttggcaaatagaa
+tcgtattagcaatcttaagaatagagacacgttcgtgttagggtatactacaaatccgaa
+aatcttaagaggatcacctaaactgaaatttatacatatttcaacgtggatagatttaac
+ataattcagccacctccaacctgggagtaattttcagtagatttactagatgattagtgg
+cccaacgcacttgactatataagatctggggatcctaacctgacctatgagacaaaattg
+gaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctgttcaacagatga
+tagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaatttagacagaat
+ggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaataggtaaacgtg
+cccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgacgtgttcagaaac
+ttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgtttctgaaccggctt
+atccctaagatatatccgtcgcaaactttcgatttagtcccacgtagagcccaagcgttg
+tgcgactccacgtgcatgcccagaaatacgagtttaaatttggttacatggttaattttg
+accgaagcatcgcactttatgattgataattggattcaatatgtcgccctatgcgaatgc
+aacatgatccacaatttggctataagacgtttaatccgtatcacactttgtttgcggcta
+gtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactccgcaggtacttc
+aaatataaaaactaatcaaacacgacccatatgatcatctgaagatatttggaactttct
+cgacaaccaccctcgtactcaatacttacactaatcgacaggcacacgcaacgtgtacag
+tcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacgcttatttctcta
+gtcacaattagttatctacgagacatcacgagggagcaaataagcgatgttatggctaca
+cataggcacgtatgaatatgatataagccagttaaacagtcgaaccatcgagcaaattct
+catgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatgtaacttcttctg
+ctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtattagtttaaatgc
+gtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaatataacatctattt
+gttatctgattgcctacttatggctttgcggtcgtggcgactaatgtctccaatcctttt
+gaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcactgcatacatata
+cggtagcaggtagggacctcacgcacccttattataatcaatagtagttatcagtcaacg
+aggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgtctaggcgactat
+cacgcattaccaggcgagatttaagccaattttgaatatagtcaacgtaatttttactat
+gggttccaccgaaacgccttgcacaactaagaatcccataaaatatcgatatcaaataaa
+agattgtgtcaataccttcatatatattttttcggttgactaacgtgaactaaggttagg
+ggttttgtatgtctatataggaaacagtttcttttctgtcctactttagtaaagtcttca
+agccttactccaaaatcacggtgattaagccgttactcagcagcatgattctgcctgctc
+gggtcctaaaatccagccttgtaagagtcgctgtgtattagctagggagacctttgttaa
+aaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatcttcagctcgtgtc
+attataatatctctcccccacgcttttcactagatatgccgtgtaagcaaacaccttatg
+cttaatttcgaaaatattggtacttgaaaaaagctgtaggggtacttaatgtctggtagg
+agatcaggagagaattgagtgtaaaaccgtaaagccctcacctgacttcatgtaaatggc
+ttagaagactccatgatttaataaatactacgaaggaaagactggatctaaagataactc
+tagtaaggccaactcccttcaatgctgttgccagttataatccaagagctgtccttttct
+gaaccatagcggcttctgaagcgaactagaagcaaagttggttctagccagacagccaca
+taccctgtacgggtgtattactaaaactggtccggtattagttcaccaagggaggaatta
+ggcaaaggatctaggtatgcaagtcggagtattacatccctaccctgaatccatcaatag
+gttcctctgtactggccttcgcaatgagtattcaaggttgtacagccgtataataataag
+atagtgactatgaacgggaagtaacccgctcaccttccccaaaacattgttatatctaag
+tattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaaattacaccgcac
+ttaagccgcttttgatttatatttttccaatgcgcttttaaaaataattcagtcctacat
+actaattaagacccttaaacggagatatcacaagttaagttttaaccatctcgactaggt
+ggaactatagatacccaactcaatttatcattacctgtaatgttcctagaaggattgcat
+ttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacagattctgagaaat
+cacctaaacctattagtcagagcacccggttagaaccagttgtcaaaaaatagagcggtt
+gcatgagacagaagtaacgatgagatccgttgtaacgttgagacatctggcctatcgtca
+atacagtcctcccttaaaaatatttttaaatactaggcaaacccaacataggttagtcct
+atgtgatacgccacatggtatatcattttgtaacgttacctagggataatcaggaagtgg
+aattacgcaaaagtagacagtgaaatgcttagggttatagtctagtccaaagataaagga
+taaagcacgtcagagaactatattagccgaatgggaatcattgttaggagactgtggatc
+atgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgtttttgtttgaatctaa
+aagagctttgatgaccgatagtacctgtatactagttactgtattacgtgtctaatgatt
+tcggattggggtccccagaatcagacgtcattgtagacgattcaagtttaccaatttaat
+ttcccagctctccttggagaactatcgccaataattgcagtcactttccttttctgaaac
+gataaagccgtcagagttctctgcaacgttggacttacctgaggttctaacccactttcg
+gttctaatagtagttaacgacacaacgaataacctttactgtggggctttcacgatattt
+tttcgcttattattaatggttacgtcataagctggtgtccaaattaaggttaccggcttc
+gcagagtagttgtatccaagtataacttccctaatcataagatcgaggtagaaaattaat
+gctgtctctaaccgaacagatatgtcccactatgtggtatggacgttgctaattacttct
+gaagggaaattggtcattatggatacgtgtctaccatcaggtcggacgcagatatggttc
+tgtcttcagttgatccaccgttctttataggataataactgacgattaaagattatggta
+aatagattaagccaattctcttcttgtcagtgaagcatccttaactgacttgctctgcag
+cccctcatacatttagctattcaaagtaccggctcgtttcaaactctcccacctttggaa
+gaggttgtcaacttgataagtatatcatttacagcattttttcggacgtacctctaatgt
+ttcattgcagaaaattagttttttctatcgcacattttgcaagtaacgttagagacacaa
+ttatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaatatcaaaaaagac
+tgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtttatctgtcccgg
+cgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcgttcttacaagtc
+tgtctccaagggtcggcaaaaaagacccctccattctcgagcccactcacgatatgtagg
+gacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggtccatatctccga
+agttagaagggacatacctttagatgataagatcaattcttattgacgaaattcatccac
+aacggggaacaacttcaccctagacttacgtctgaaaagacacctagcgtcttataaaag
+gtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaacctcgcgcccttc
+cttacgtatcgacaagatagaggctatcgcgaatgtactacggaggcatgaatcatatac
+tagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcaccgtaattctaggc
+ataaaactccagcaatttgggggccgaaaacaaatgacgttagctaattaattatatgac
+atgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattgaacttcgtgcgt
+ttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttcatgcgtacctcct
+agttgataattccccgagcagtggttaggacacttttgtcggtatcaagttccggtctca
+aaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaatttttatgaagtc
+gtcgagacgcagttcctattgatttattctaaacggagatgtgcttcgtgggactcggaa
+gtagatctgtgtttatgattattgctactttagatgctgactgttaactccgtgttgttt
+ttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagttctgccacaagg
+tatcatatttacagttagtgctggttgcttctttcaaacgtggtgagtttgtgctatcac
+gtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttccagagagggtgtga
+tagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagagccggtgttaaac
+acatattattattgttatccaactaatcggacctatgcataaagcattgtctaaacagaa
+taattgcctatatacggtagttttagtgatttatatcttagtatcagttagagcttcgaa
+ctcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttctacaaacgaatgta
+agcggttttccaagtagtacctataaatcacagaaagatctgtctcagtatagttgaaat
+ggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaagacgctcattaa
+cgaatatagacaagacactatatcatataataaaaaagaacatggtgctcgaacatagtt
+gaattcaccatattgaaggggaatgctgacatgtaattcgctactagacgatcaattccc
+tacttgtcaaagttgaactggtacgttcttggaattaaatatgattgcgctggaccaaat
+tgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccgtctcttaccttt
+cttgcttatgataaacgacggtccctgtacatcactgggaattctcagcaaaaataattg
+ggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaaagattattcaac
+ggggcgataataggatcataaccggtatgcaagcgcattgaaagagccatgagatcctta
+tccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaatttataaatgtag
+tctgggctgtaagttgaagacctaagttataatgaagtgcaataccaaatcgattcatag
+tggattatcagactcaagatatctcctgataaattacagttgttaagatacggataaaat
+gagatttaagattagcagcctctaatctgtttcaatcccgttggaatgtggtatgcgatc
+aaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctgccatcgcatgcg
+gtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctgagtatagattcg
+tagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtcacacaagacact
+aaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagttcttgttatattc
+gatatactcttggctaatttatgtctgagtatataaaattaatgatattaacttgcattt
+cacggatcccttagaaaaagattttgaccgagcgcattataaacggttacaccgaatcaa
+tagaagcatacccaatagctttctttgaatttattgcctgcgcaacttggctgactctct
+agatccgaataattctatatggtcgtgacgaaactagttcattactgtttaaaatgccaa
+catgtcttttgggccgataatggctctttgcaaaattactcaatgatacgattgatcaaa
+gcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattatccgaaaatcttc
+caaaagagtccacgtaccatatctatctcatagcgacgcgaggggaaccttatctaacta
+tcattccatttaccgggtgactctcgatgcaggatccgattgggataaattgcccagaaa
+tggctcattcctgactaagggtaaggccgttctcagcaagggaaccccgcgaatctaggc
+ttataccatctagattgttaactacttgcctgtagttctacagccatactggacagttgt
+ttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgtaagtttaactat
+tacgtccgtgggcagataaggatggaggctgtatgtatcttaactgttacctaatatggc
+tggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgctttgtatactga
+ccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaactgtggacgatca
+tgtctctgcctagagcttcgctgtatcaattcctatagccagcgtactagtgacacaaca
+acaccgtgtgagaaaagatattagtccttacgtctgtctctctacagcttattgatgagg
+attgaacatggacatatagctccccctcaaaagcagatgctacctctttattccattctc
+gaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaatttatcggtaacg
+tcacgtccctttgagactggataaatatattaccaggggccaacgagcaattgttggagg
+cgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtctcgtgcaactcac
+ttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtgtactgccctggt
+acatttcctgtacaggactccaacagtgtagattcctaagatagctgttggagttgcctc
+acgccagatcgaaaaactgaataaactagtgagctgagctgcagaaataccgcttaatta
+cttatgactagttcaaagggacctacgtgatgtcagacattgcaaggaagaaattaggtt
+tgtgcgtcattttggctggactagcactccttacttcccctactattcaaatgtcgtaaa
+cagcatgagacaggatcgtgctgacatttaaggtctattgggaacgaggctacctttggt
+cgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgcaattgcttatag
+atctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcagttcttcctcagc
+aactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaacctatgcgctca
+tttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattcctctacttagta
+gctttctttgattctcagaattgactgcaatatcactgcacaattctgtgccattactag
+acttctctgtattaacgtctcatcttactaacactcgcctaggacacatctgagagtgaa
+gtatttcaatacatttactgaaatcttcagttctaaaatccccgaataaggctcttatcg
+gtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatacgcaggagcctgg
+ggaacttagtaataactatttcggcagacaaagcttataacaagttgccggcgcgtataa
+tatttaaaagaccccttgagctgctcaattaaaacgctcacctggtataggctattagat
+agtgccgtcttagtaaggggcgggaattatcggataaactgatattttgataaaataacc
+gacttgttcacgacataagtcactaaggagattttatctttctccaaagtatatcttcct
+tggataatttcaaagcgctgcaatttaagttctgttactagtttatgctgctgggaggtg
+accggaaggcgtagtaatctagaggcaaattataagaagttcatcatatcattttcgact
+acaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagtaccctagatgga
+aaattatacgttaagccaagatttcgatgtaatgataattacctacacatttttgctatc
+cataggaacaagagctgttctataggctcgtggcatacgaacatttgctgccgctatgaa
+tattggaagctcttcaactacagactctattcttaattgccgtcgaaaatgggccgaatc
+ggctattattaatactcggtttttccgaggggattgttgtcgacagtcgtaattattatt
+aatattgatgttggtgaggtcatttaaatacaaccttgcagacaatgaataagggatcca
+atctctcatactccttttacaattgctcatgcccctatgcaaaccttatgccgccacacc
+tccgcaactctctcttctgaactgtaagtagcttcattactggtttgagactatactgaa
+gctgatgacattctaaaatggctattttcgaatgtgattcataatgtttatcgtttggga
+tggcagaatcacgttatttttgatatagcccgggtattctattgtatagaacgtatgcta
+caagtcattccccgaagaagactagaagtaaacaacatgcgaccatcgttaagccacgca
+aggctgtagctttatttcccgataacctatcttccataaatagcggacagcaggatactg
+acgctcaacatcagtggttatggtctaatttttaacttttaataaggtaacttcagcagg
+catacacagtaactctttaatttataatcaaattagaagtctgacacttcttatattttt
+ctatcatccaacgcgatcgcccattagcttattgtgttactaataacgtatctaaaccaa
+tccttttcaagctactgcctatattgtcaatatatacaaacaacaggatagtaggctgct
+taaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcacaaactttgtagac
+aacgagtgaaatttatacactacgaagggccagcgtacaagacccatgaattaggcgata
+tgtttattctgacatattggtttatccttaatctgtcgctgtaaaatgaagccgccccca
+tccctgcgaattttttttcgaagattcacgactgaaatataaatacgtttggctatattt
+atgttggagggaggcaatagcctttactgttaaccgaagatttagccagtgagtgtgaca
+ctaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttagtcaatctcgcct
+ataagttcatatagctctggatataattatctggcccatgcatttatcatggcgcttggt
+gccctgtgtgaagccggcctctcatattgaaggtccgaagtattccatgtacattaagat
+cactctctcattcatgcatcttggcttaacaaatctggttgtccaagctttccaggcacg
+tatggtacaaattcggatcgaatacttataaaaatgatatgttaaactgtctaaaacgct
+catctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgtaatgctggtgcac
+tgaatgtgtaatacggttagaagggattagttatgttacaaatccattgaaaacttaaga
+agcattgcgtgctcggagggtgcatcttttatcaagagactaacattattttcaacgacg
+tacatgctttacaatagggtacttatcaaacgccgagaaacgcgcctatagtgatgttat
+gattatgacccgatatccattggaccgaattttatgtaggttcccagcgtactcgcgtaa
+tatctcggtattgccataatgtaatacttgtcggtctctcccagatgaaaaagcgttaca
+gagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggtaacggccgctgat
+ttcatatagatatacgataagttggtatagctctactaggtggcatccacaatcgttgca
+tttactatagctggttacaatcataatctataccgttccttacatactaccatagcggga
+tagcgtttttttgccgttgattgggtttaagaggatgtcagtctcattatatccgattcg
+gtgggagagccgttgttttcaaatcgcacactttgtgacataatgtacaagataacaaaa
+ctgatataagatataaactgtcaatatcaccttgacacttgaatcaaagtaaattaactc
+gcaaatataatttgactaattgggtgcagatttctcaattaataaaaaaatggcaccgga
+tgggcttacaagccccttatcattcacttgtatcatgatttccaagaacaatagaatttg
+ctagcaagtatgaacagagattcgaattgcatccacagtacgccggagcgtttattttaa
+tgtggatatgacgatgtactgttggcggcatttgctagtaaccggtccttatttacgtag
+cgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagagaaagattacagt
+ttggtttaaataggacttatcgggtcggaagtggaacttaataagcagtacacaattggg
+caacagacgtcttgcctattacaataggattacaatgcgttagatttcagacacgttcgt
+gtttggctattcgtcaattccctaaatagttagacgatcaactattatcaaagtgattct
+ttgttcatcctccattcatgtaacagatggcacactacgcataacgccgaggaattttaa
+cgagatttaagagagcagttcgggcacaacccacttgactttataacagctcggcagcat
+aaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgtacttagaaaact
+aagtggttcatgttcaacagatgtgacgcagcaagcctaacttatctattggttttgcta
+taaaagaacaaagttacacagaatcctaagggcttgtttcacacttatgcctagtgcttc
+accatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatgcgcagatattgg
+tgatggtgactccgggtatgataatggtaactgttgaccagcgcccacctcatcgaagta
+tagaaagtggttaggataaggatgagaccgaacttatttccggccataactttagatttt
+ctacctagtacacaacatcagggcggacacgaaaccgccatcacatcatataccaggttt
+aatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcaggcatatggccatt
+atatatggccccagagcagaatgctacagcagacaaaatttggatttatgtagtttaata
+cctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaagtgtaagttacaa
+ttattactactcagcagcttctgcaatgataaaatcttatcatacacgtcacatatgata
+atatctacttagggggaacgggctccacaacctacatagtactcaatacttacactattc
+gacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttgcagtactgcaga
+tcacagtaatagcttagttagcgagtcaaaattagttttctacgagactgcacgaccgtg
+caaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttgaagccacgtaaa
+ctgtacaaccttagagataagtctcaggctactaaaaacacgttgtggcactaacaggat
+catggttgattcttacttattcggctgaccggcccaataagtaaccttcaactagaacag
+aataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaactaacaagctct
+gtgtaaccaagttaaaatcgttttcttagcggattccctacttatggatttgagctcgtc
+cacaatattcgatacaagaagtttgtggtccgtaacaacgaaattttaattacgctgtgc
+agcctcatccaaggaattaatagaaggttgatggtaggctccgaacgctccatgattata
+atcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggtgttcgtttttgt
+tatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaacccatggttgat
+tttaggctaccttatttttaatttccgttacacagaaacgaattccacaactaacatgcc
+attaatttttcgatatcttataaaagatggtcgaaattcattcatttattttttttcggt
+tctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaaaagtggctttga
+tctcctacgtttggatactagtcaaccattactccatttgatccgtgagtatcacctgtc
+taacatccagcattatgactcctcggcgaagaaaagacacacttcttagagtcgatgtgt
+attagctagggacacagttgtttaatacgatagtgagcccagggagggcagtgcgtcccc
+cagtagatttattcagctagtgtaagtataagatatctcacccacgaggttcaagtgata
+tgcagtcttagaataatacttatcctgaatttcgatattatgggtacttcaataatccgc
+tagcgctactttatgtctcgttggacagcaggacacatggcagtcttaaacactaaagac
+atcacctgaatgaatgtaatgggattacaagaatcaatgaggtattatatacgacgtagg
+aaactctggatatatacagtaatctagttacgccatcgcacttcattcctctggaaactt
+agaagacatcagctgtacgtggaggaaccagacccccgtatgtagccaaatagaaccaaa
+gttgcttatacaaacacacccaatgacaatggaccgctggagttcgtaaactcggaacgt
+agtactgcacaaacccagcatttagcaataggagctacgtatgcaactcccacgtggtaa
+taccttcaagctatcaatatataggtgcctagctaatcgcattcgcaagcagtattcaag
+cttgtaaaccagtataataattacagaggctctatgaaacccaactttccagctaaaagt
+cccaattaaatggttatttc
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/harness-helpers.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/harness-helpers.cs
new file mode 100644
index 0000000000..c494982cc9
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/harness-helpers.cs
@@ -0,0 +1,97 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// Helper functionality to locate inputs and find outputs for
+// reverse-complement benchmark in CoreCLR test harness
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace BenchmarksGame
+{
+ class TestHarnessHelpers
+ {
+ public string InputFile;
+ public int FileLength;
+ public string CheckSum;
+
+ public TestHarnessHelpers(bool bigInput, [System.Runtime.CompilerServices.CallerFilePath] string csFileName = "")
+ {
+ if (bigInput)
+ {
+ InputFile = FindInputFile("revcomp-input25000.txt", csFileName);
+ FileLength = 254245;
+ CheckSum = "61-A4-CC-6D-15-8D-26-77-88-93-4F-E2-29-A2-8D-FB";
+ }
+ else
+ {
+ InputFile = FindInputFile("revcomp-input25.txt", csFileName);
+ FileLength = 333;
+ CheckSum = "62-45-8E-09-2E-89-A0-69-8C-17-F5-D8-C7-63-5B-50";
+ }
+ }
+
+ public string FindInputFile(string inputFile, string csFileName)
+ {
+ string CoreRoot = System.Environment.GetEnvironmentVariable("CORE_ROOT");
+
+ if (CoreRoot == null)
+ {
+ Console.WriteLine("This benchmark requries CORE_ROOT to be set");
+ return null;
+ }
+
+ // The convention is that the csproj file has the same name as the cs file.
+ string projectName = Path.GetFileNameWithoutExtension(csFileName);
+ int slashIndex = projectName.LastIndexOfAny(new char[] { '/', '\\' });
+ if (slashIndex != -1)
+ {
+ // csFileName was generated by the C# compiler, which may have run on
+ // a different host system with different path separator than the
+ // currently executing host, which dictates GetFileNameWithoutExtension's
+ // behavior... so hope that the slash here is a cross-host path separator,
+ // and chop of what were likely direcotires.
+ projectName = projectName.Substring(slashIndex + 1);
+ }
+
+ // Normal testing -- input file will end up next to the assembly
+ // and CoreRoot points at the test overlay dir
+ string[] pathPartsNormal = new string[] {
+ CoreRoot, "..", "..", "JIT", "Performance",
+ "CodeQuality", "BenchmarksGame", "reverse-complement", projectName, inputFile
+ };
+
+ string inputPathNormal = Path.Combine(pathPartsNormal);
+
+ // Perf testing -- input file will end up next to the assembly
+ // and CoreRoot points at this directory
+ string[] pathPartsPerf = new string[] { CoreRoot, inputFile };
+
+ string inputPathPerf = Path.Combine(pathPartsPerf);
+
+ string inputPath = null;
+
+ if (File.Exists(inputPathNormal))
+ {
+ inputPath = inputPathNormal;
+ }
+ else if (File.Exists(inputPathPerf))
+ {
+ inputPath = inputPathPerf;
+ }
+
+ if (inputPath != null)
+ {
+ Console.WriteLine("Using input file {0}", inputFile);
+ }
+ else
+ {
+ throw new Exception($"Unable to find input file {inputFile}. Tried {inputPathNormal} and {inputPathPerf}; csFileName was {csFileName}, so projectName was {projectName}.");
+ }
+
+ return inputPath;
+ }
+ }
+}
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.cs
index 6ff7dcc23d..8846d74e6e 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.cs
@@ -17,18 +17,23 @@ using System;
using System.IO;
using System.Collections.Generic;
using System.Collections.Concurrent;
+using System.Security.Cryptography;
using System.Threading;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
class RevCompSequence { public List<byte[]> Pages; public int StartHeader, EndExclusive; public Thread ReverseThread; }
- public static class revcomp
+ public static class ReverseComplement_6
{
const int READER_BUFFER_SIZE = 1024 * 1024;
const byte LF = 10, GT = (byte)'>', SP = 32;
- static BlockingCollection<byte[]> readQue = new BlockingCollection<byte[]>();
- static BlockingCollection<RevCompSequence> writeQue = new BlockingCollection<RevCompSequence>();
+ static BlockingCollection<byte[]> readQue;
+ static BlockingCollection<RevCompSequence> writeQue;
static byte[] map;
static int read(Stream stream, byte[] buffer, int offset, int count)
@@ -38,9 +43,10 @@ namespace BenchmarksGame
: bytesRead == 0 ? offset
: read(stream, buffer, offset + bytesRead, count - bytesRead);
}
+ static Stream ReaderStream;
static void Reader()
{
- using (var stream = Console.OpenStandardInput())
+ using (var stream = ReaderStream)
{
int bytesRead;
do
@@ -56,7 +62,8 @@ namespace BenchmarksGame
static bool tryTake<T>(BlockingCollection<T> q, out T t) where T : class
{
t = null;
- while (!q.IsCompleted && !q.TryTake(out t)) Thread.SpinWait(0);
+ var wait = new SpinWait();
+ while (!q.IsCompleted && !q.TryTake(out t)) wait.SpinOnce();
return t != null;
}
@@ -190,9 +197,10 @@ namespace BenchmarksGame
if (startIndex == endIndex) startBytes[startIndex] = map[startBytes[startIndex]];
}
+ static Stream WriterStream;
static void Writer()
{
- using (var stream = Console.OpenStandardOutput())
+ using (var stream = WriterStream)
{
bool first = true;
RevCompSequence sequence;
@@ -220,8 +228,56 @@ namespace BenchmarksGame
}
}
- public static void Main(string[] args)
+ static int Main(string[] args)
+ {
+ var helpers = new TestHarnessHelpers(bigInput: false);
+ var outBytes = new byte[helpers.FileLength];
+ using (var input = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var output = new MemoryStream(outBytes))
+ {
+ Bench(input, output);
+ }
+ Console.WriteLine(System.Text.Encoding.UTF8.GetString(outBytes));
+ if (!MatchesChecksum(outBytes, helpers.CheckSum))
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 33)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+ var outBytes = new byte[helpers.FileLength];
+
+ Benchmark.Iterate(() =>
+ {
+ var input = new FileStream(helpers.InputFile, FileMode.Open);
+ var output = new MemoryStream(outBytes);
+ {
+ Bench(input, output);
+ }
+ });
+
+ Assert.True(MatchesChecksum(outBytes, helpers.CheckSum));
+ }
+
+ static bool MatchesChecksum(byte[] bytes, string checksum)
+ {
+ using (var md5 = MD5.Create())
+ {
+ byte[] hash = md5.ComputeHash(bytes);
+ return (checksum == BitConverter.ToString(hash));
+ }
+ }
+
+ static void Bench(Stream input, Stream output)
{
+ readQue = new BlockingCollection<byte[]>();
+ writeQue = new BlockingCollection<RevCompSequence>();
+ ReaderStream = input;
+ WriterStream = output;
new Thread(Reader).Start();
new Thread(Grouper).Start();
Writer();
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.csproj
new file mode 100644
index 0000000000..b1be51cf12
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-best.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{9449A6C4-69BD-496B-83AD-55046F464950}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="revcomp-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="revcomp-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.cs
index 45236b95e1..e38909d8fd 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.cs
@@ -15,10 +15,15 @@
using System;
using System.IO;
using System.Collections.Generic;
+using System.Security.Cryptography;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- static class revcomp
+ public static class ReverseComplement_1
{
struct Block
{
@@ -43,15 +48,59 @@ namespace BenchmarksGame
const byte Gt = (byte)'>';
const byte Lf = (byte)'\n';
- static void Main(string[] args)
+ static int Main(string[] args)
+ {
+ var helpers = new TestHarnessHelpers(bigInput: false);
+ var outBytes = new byte[helpers.FileLength];
+ using (var input = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var output = new MemoryStream(outBytes))
+ {
+ Bench(input, output);
+ }
+ Console.WriteLine(System.Text.Encoding.UTF8.GetString(outBytes));
+ if (!MatchesChecksum(outBytes, helpers.CheckSum))
+ {
+ return -1;
+ }
+ return 100;
+ }
+
+ [Benchmark(InnerIterationCount = 1500)]
+ public static void RunBench()
+ {
+ var helpers = new TestHarnessHelpers(bigInput: true);
+ var outBytes = new byte[helpers.FileLength];
+
+ Benchmark.Iterate(() =>
+ {
+ using (var input = new FileStream(helpers.InputFile, FileMode.Open))
+ using (var output = new MemoryStream(outBytes))
+ {
+ Bench(input, output);
+ }
+ });
+
+ Assert.True(MatchesChecksum(outBytes, helpers.CheckSum));
+ }
+
+ static bool MatchesChecksum(byte[] bytes, string checksum)
+ {
+ using (var md5 = MD5.Create())
+ {
+ byte[] hash = md5.ComputeHash(bytes);
+ return (checksum == BitConverter.ToString(hash));
+ }
+ }
+
+ static void Bench(Stream input, Stream output)
{
InitComplements();
var seq = new List<byte[]>();
var b = new Block { Count = -1 };
Index line = Index.None, start = Index.None, end = Index.None;
- using (var r = new BinaryReader(Console.OpenStandardInput()))
+ using (var r = new BinaryReader(input))
{
- using (var w = Console.OpenStandardOutput())
+ using (var w = output)
{
while (b.Read(r) > 0)
{
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.csproj
new file mode 100644
index 0000000000..5e0c567553
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/reverse-complement/reverse-complement-serial.csproj
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{D10015D3-6A09-400C-8CF6-9F50BEED71D2}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ </PropertyGroup>
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ <Compile Include="harness-helpers.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="revcomp-input25.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="revcomp-input25000.txt">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project>
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.cs
index faa8128e8e..373ea2c216 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.cs
@@ -14,22 +14,43 @@
*/
using System;
+using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
+using Microsoft.Xunit.Performance;
+using Xunit;
-namespace SpectralNorms
+[assembly: OptimizeForBenchmarks]
+
+namespace BenchmarksGame
{
- class SpectralNorm
+ public class SpectralNorm_3
{
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
int n = 100;
if (args.Length > 0) n = Int32.Parse(args[0]);
- Console.WriteLine("{0:f9}", spectralnormGame(n));
+ double norm = Bench(n);
+ Console.WriteLine("{0:f9}", norm);
+
+ double expected = 1.274219991;
+ bool result = Math.Abs(norm - expected) < 1e-4;
+ return (result ? 100 : -1);
+ }
+
+ [Benchmark(InnerIterationCount = 1400)]
+ public static void RunBench()
+ {
+ double norm = 0.0;
+ Benchmark.Iterate(() => { norm = Bench(100); });
+
+ double expected = 1.274219991;
+ Assert.True(Math.Abs(norm - expected) < 1e-4);
}
- private static double spectralnormGame(int n)
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ private static double Bench(int n)
{
double[] u = new double[n];
double[] v = new double[n];
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.csproj
new file mode 100644
index 0000000000..3f22766ae7
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-best.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{0B6702EB-3EED-41EB-B034-B3769918A476}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.cs
index d33ce48d7a..f74c556c55 100644
--- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.cs
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.cs
@@ -13,20 +13,42 @@
*/
using System;
+using System.Runtime.CompilerServices;
+using Microsoft.Xunit.Performance;
+using Xunit;
+
+[assembly: OptimizeForBenchmarks]
namespace BenchmarksGame
{
- class SpectralNorm
+ public class SpectralNorm_1
{
- public static void Main(String[] args)
+ public static int Main(String[] args)
{
int n = 100;
if (args.Length > 0) n = Int32.Parse(args[0]);
- Console.WriteLine("{0:f9}", new SpectralNorm().Approximate(n));
+ double norm = new SpectralNorm_1().Bench(n);
+ Console.WriteLine("{0:f9}", norm);
+
+ double expected = 1.274219991;
+ bool result = Math.Abs(norm - expected) < 1e-4;
+ return (result ? 100 : -1);
+ }
+
+ [Benchmark(InnerIterationCount = 700)]
+ public static void RunBench()
+ {
+ var obj = new SpectralNorm_1();
+ double norm = 0.0;
+ Benchmark.Iterate(() => { norm = obj.Bench(100); });
+
+ double expected = 1.274219991;
+ Assert.True(Math.Abs(norm - expected) < 1e-4);
}
- double Approximate(int n)
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ double Bench(int n)
{
// create unit vector
double[] u = new double[n];
diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.csproj b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.csproj
new file mode 100644
index 0000000000..6aa7d71500
--- /dev/null
+++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm-serial.csproj
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{2FA952B1-A5C1-435D-918F-F3750714FB92}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
+ <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
+ </PropertyGroup>
+ <!-- Default configurations to help VS understand the configurations -->
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+ <PropertyGroup>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup>
+ <PropertyGroup>
+ <ProjectAssetsFile>$(JitPackagesConfigFileDirectory)benchmark\obj\project.assets.json</ProjectAssetsFile>
+ </PropertyGroup>
+</Project> \ No newline at end of file