summaryrefslogtreecommitdiff
path: root/tests/src/Loader/classloader/regressions
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
commit4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch)
tree98110734c91668dfdbb126fcc0e15ddbd93738ca /tests/src/Loader/classloader/regressions
parentfa45f57ed55137c75ac870356a1b8f76c84b229c (diff)
downloadcoreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'tests/src/Loader/classloader/regressions')
-rw-r--r--tests/src/Loader/classloader/regressions/101682/lib.cs15
-rw-r--r--tests/src/Loader/classloader/regressions/101682/lib.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/101904/test.cs27
-rw-r--r--tests/src/Loader/classloader/regressions/101904/test.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/106647/lib.cs28
-rw-r--r--tests/src/Loader/classloader/regressions/106647/lib.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/111021/main.cs30
-rw-r--r--tests/src/Loader/classloader/regressions/111021/main.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/123413/ilib.cs17
-rw-r--r--tests/src/Loader/classloader/regressions/123413/ilib.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/123413/lib.cs21
-rw-r--r--tests/src/Loader/classloader/regressions/123413/lib.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/139056/Foo.il163
-rw-r--r--tests/src/Loader/classloader/regressions/139056/Foo.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/144257/vsw144257.cs42
-rw-r--r--tests/src/Loader/classloader/regressions/144257/vsw144257.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs112
-rw-r--r--tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il187
-rw-r--r--tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/181424/test5.il96
-rw-r--r--tests/src/Loader/classloader/regressions/181424/test5.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/208900/bug.cs43
-rw-r--r--tests/src/Loader/classloader/regressions/208900/bug.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/226741/test3.il24
-rw-r--r--tests/src/Loader/classloader/regressions/226741/test3.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/245191/nullenum1000.cs7043
-rw-r--r--tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/307137/vsw307137.cs66
-rw-r--r--tests/src/Loader/classloader/regressions/307137/vsw307137.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/347422/b347422.cs49
-rw-r--r--tests/src/Loader/classloader/regressions/347422/b347422.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/348842/A.cs8
-rw-r--r--tests/src/Loader/classloader/regressions/348842/A.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/359519/test359519.cs49
-rw-r--r--tests/src/Loader/classloader/regressions/359519/test359519.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/405223/vsw405223.cs29
-rw-r--r--tests/src/Loader/classloader/regressions/405223/vsw405223.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/421439/RefX1.il25
-rw-r--r--tests/src/Loader/classloader/regressions/421439/RefX1.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/421439/Test.il65
-rw-r--r--tests/src/Loader/classloader/regressions/421439/Test.ilproj40
-rw-r--r--tests/src/Loader/classloader/regressions/421439/ValX1.il18
-rw-r--r--tests/src/Loader/classloader/regressions/421439/ValX1.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/429802/BarImpl.il75
-rw-r--r--tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj39
-rw-r--r--tests/src/Loader/classloader/regressions/429802/CMain.il127
-rw-r--r--tests/src/Loader/classloader/regressions/429802/CMain.ilproj40
-rw-r--r--tests/src/Loader/classloader/regressions/429802/MyBar.il77
-rw-r--r--tests/src/Loader/classloader/regressions/429802/MyBar.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs75
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Bar.il75
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Bar.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Foo.il72
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Foo.ilproj39
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Test.il75
-rw-r--r--tests/src/Loader/classloader/regressions/440935/Test.ilproj39
-rw-r--r--tests/src/Loader/classloader/regressions/451034/LoadType.cs20
-rw-r--r--tests/src/Loader/classloader/regressions/451034/LoadType.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/451034/Type.il45
-rw-r--r--tests/src/Loader/classloader/regressions/451034/Type.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/452434/vsw452434.il33
-rw-r--r--tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/452707/b452707.il67
-rw-r--r--tests/src/Loader/classloader/regressions/452707/b452707.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/523654/test532654_b.cs190
-rw-r--r--tests/src/Loader/classloader/regressions/523654/test532654_b.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il53
-rw-r--r--tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs93
-rw-r--r--tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs86
-rw-r--r--tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/583649/Type_Class42.il29
-rw-r--r--tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/583649/vsw583649.cs30
-rw-r--r--tests/src/Loader/classloader/regressions/583649/vsw583649.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs78
-rw-r--r--tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs50
-rw-r--r--tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/asurt150271/test23.il67
-rw-r--r--tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/asurt150271/test3.il95
-rw-r--r--tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dd116295/dd116295.cs58
-rw-r--r--tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dd52/dd52.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dd52/runtest.cs41
-rw-r--r--tests/src/Loader/classloader/regressions/dd52/test.il70
-rw-r--r--tests/src/Loader/classloader/regressions/dd52/test.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs32
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_398410/utility.cs13
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il223
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj40
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il64
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/gentype.il65
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il123
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il99
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs36
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs111
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il572
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il343
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il1264
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il819
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il1191
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs44
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il99
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il98
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il130
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs168
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il200
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs38
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs29
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs29
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs29
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs29
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs11
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs11
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs51
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs27
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_897464/Test.il38
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs43
-rw-r--r--tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il102
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_221340/Library.il17
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il42
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_256384/Library.cs19
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs21
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs10
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs46
-rw-r--r--tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw111021/main.cs30
-rw-r--r--tests/src/Loader/classloader/regressions/vsw111021/main.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il224
-rw-r--r--tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il74
-rw-r--r--tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs66
-rw-r--r--tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il53
-rw-r--r--tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj35
-rw-r--r--tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs93
-rw-r--r--tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj39
-rw-r--r--tests/src/Loader/classloader/regressions/vsw531159/repro.cs30
-rw-r--r--tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj35
183 files changed, 19985 insertions, 0 deletions
diff --git a/tests/src/Loader/classloader/regressions/101682/lib.cs b/tests/src/Loader/classloader/regressions/101682/lib.cs
new file mode 100644
index 0000000000..1260a01e6b
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/101682/lib.cs
@@ -0,0 +1,15 @@
+// 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.
+
+using System;
+
+public class Foo<A>
+{
+ public virtual void FV<B>(B x) {
+ Console.WriteLine("Foo<{0}>.FV<{1}>({2})", typeof(A), typeof(B), x);
+ }
+ public virtual void FV<B,C>(B x) {
+ Console.WriteLine("Foo<{0}>.FV<{1},{2}>({3})", typeof(A), typeof(B), typeof(C), x);
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/101682/lib.csproj b/tests/src/Loader/classloader/regressions/101682/lib.csproj
new file mode 100644
index 0000000000..be6b2bc9c3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/101682/lib.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>lib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="lib.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/101904/test.cs b/tests/src/Loader/classloader/regressions/101904/test.cs
new file mode 100644
index 0000000000..0748e53f14
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/101904/test.cs
@@ -0,0 +1,27 @@
+// 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.
+
+// This test should be run with verification on: e.g. caspol -m -cg 1.1 Everything
+// In this test, we have MyType implementing IFoo<T> twice, first indirectly through MyBaseType
+// as IFoo<string>, and second directly as IFoo<int>.
+// In the end, a MyType<string,int> should be assignable to an IFoo<string> or an IFoo<int>.
+using System;
+
+public interface IFoo<T>{
+}
+
+public class MyBaseType<T> : IFoo<T>{
+}
+
+public class MyType<S,T> : MyBaseType<S>, IFoo<T>{
+}
+
+public class CMain{
+ public static int Main(){
+ MyType<string,int> mt = new MyType<string,int>();
+ IFoo<int> f = mt;
+ Console.WriteLine("PASS"); // if we make this far, we passed.
+ return 100;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/101904/test.csproj b/tests/src/Loader/classloader/regressions/101904/test.csproj
new file mode 100644
index 0000000000..67d2b7c9a6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/101904/test.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/106647/lib.cs b/tests/src/Loader/classloader/regressions/106647/lib.cs
new file mode 100644
index 0000000000..d0597939a6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/106647/lib.cs
@@ -0,0 +1,28 @@
+// 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.
+
+using System;
+
+public class Base<A,B>
+{
+ public virtual void FV(ref MethodsFired pMF) {
+ pMF |= MethodsFired.Base;
+ }
+}
+
+public class BaseNonGen
+{
+ public virtual void FV(ref MethodsFired pMF) {
+ pMF |= MethodsFired.Base;
+ }
+}
+
+[Flags]
+public enum MethodsFired{
+ None = 0x0000,
+ Leaf = 0x0001,
+ Interior = 0x0002,
+ Base = 0x0004,
+ All = Leaf | Interior | Base
+}
diff --git a/tests/src/Loader/classloader/regressions/106647/lib.csproj b/tests/src/Loader/classloader/regressions/106647/lib.csproj
new file mode 100644
index 0000000000..be6b2bc9c3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/106647/lib.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>lib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="lib.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/111021/main.cs b/tests/src/Loader/classloader/regressions/111021/main.cs
new file mode 100644
index 0000000000..7a107d7f00
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/111021/main.cs
@@ -0,0 +1,30 @@
+// 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.
+
+using System;
+public class CMain{
+ public static int Count = 0;
+ public static int Main(String[] args){
+ String s;
+ s = Gen<String>.x;
+ // we expect the Gen<T>.cctor to fire only once!
+ if(1 == Count){
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else{
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+}
+
+public class Gen<T>{
+
+ public static T x;
+ static Gen(){
+ CMain.Count++;
+ Console.WriteLine("cctor. Type: {0}",typeof(T).ToString());
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/111021/main.csproj b/tests/src/Loader/classloader/regressions/111021/main.csproj
new file mode 100644
index 0000000000..2719060551
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/111021/main.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>main</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="main.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/123413/ilib.cs b/tests/src/Loader/classloader/regressions/123413/ilib.cs
new file mode 100644
index 0000000000..d21d6d5f97
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/123413/ilib.cs
@@ -0,0 +1,17 @@
+// 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.
+
+using System;
+
+public interface Int<A,B>
+{
+ void FV(ref MethodsFired pMF);
+}
+
+[Flags]
+public enum MethodsFired{
+ None = 0x0000,
+ ExplicitInt = 0x0001,
+ Public = 0x0004
+}
diff --git a/tests/src/Loader/classloader/regressions/123413/ilib.csproj b/tests/src/Loader/classloader/regressions/123413/ilib.csproj
new file mode 100644
index 0000000000..eef563ff1c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/123413/ilib.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>ilib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="ilib.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/123413/lib.cs b/tests/src/Loader/classloader/regressions/123413/lib.cs
new file mode 100644
index 0000000000..95c7435d04
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/123413/lib.cs
@@ -0,0 +1,21 @@
+// 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.
+
+using System;
+
+public class Base<A,B>
+{
+ public virtual void FV(ref MethodsFired pMF) {
+ pMF |= MethodsFired.Base;
+ }
+}
+
+[Flags]
+public enum MethodsFired{
+ None = 0x0000,
+ Leaf = 0x0001,
+ Interior = 0x0002,
+ Base = 0x0004,
+ All = Leaf | Interior | Base
+}
diff --git a/tests/src/Loader/classloader/regressions/123413/lib.csproj b/tests/src/Loader/classloader/regressions/123413/lib.csproj
new file mode 100644
index 0000000000..be6b2bc9c3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/123413/lib.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>lib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="lib.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/139056/Foo.il b/tests/src/Loader/classloader/regressions/139056/Foo.il
new file mode 100644
index 0000000000..a2bc3bba76
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/139056/Foo.il
@@ -0,0 +1,163 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 1.2.30612.00
+// Copyright (C) Microsoft Corporation 1998-2003. All rights reserved.
+
+
+
+// Metadata version: v1.2.30612
+.assembly extern legacy library mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .hash = (81 51 4F DD 43 6C 78 C8 8C 87 6B 7F 41 A9 D8 DA // .QO.Clx...k.A...
+ FA 84 09 19 )
+ .ver 1:2:3400:0
+}
+.assembly legacy library Foo
+{
+
+ // --- The following custom attribute is added automatically, do not uncomment -------
+ // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
+ // bool) = ( 01 00 00 01 00 00 )
+
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module Foo.exe
+// MVID: {E2294DFD-8443-4AA7-9104-BC680C3B8133}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x04130000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit Foo
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig newslot virtual
+ instance void DoFoo() cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 8
+ IL_0000: ldstr "Running Foo.DoFoo"
+ IL_0005: call void [System.Console]System.Console::WriteLine(string)
+ IL_000a: ret
+ } // end of method Foo::DoFoo
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Foo::.ctor
+
+} // end of class Foo
+
+.class public auto ansi beforefieldinit Bar
+ extends Foo
+{
+ .method public hidebysig newslot virtual
+ instance void NotDoFoo1() cil managed
+ {
+ .override Foo::DoFoo
+
+ // Code size 11 (0xb)
+ .maxstack 8
+ IL_0000: ldstr "Running Bar.NotDoFoo1"
+ IL_0005: call void [System.Console]System.Console::WriteLine(string)
+ IL_000a: ret
+ } // end of method Bar::NotDoFoo1
+
+ .method public hidebysig virtual instance void
+ DoFoo() cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 8
+ IL_0000: ldstr "Running Bar.DoFoo"
+ IL_0005: call void [System.Console]System.Console::WriteLine(string)
+ IL_000a: ret
+ } // end of method Bar::DoFoo
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void Foo::.ctor()
+ IL_0006: ret
+ } // end of method Bar::.ctor
+
+} // end of class Bar
+
+.class public auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+
+ .method public static int32 Main()
+ {
+ .entrypoint
+ .locals init (class Bar V_0,
+ class Foo V_1,
+ class [mscorlib]System.Exception V_2,
+ int32 V_3)
+
+ .try
+ {
+ newobj instance void Bar::.ctor()
+ stloc.0
+ ldloc.0
+ stloc.1
+
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 100
+ stloc.3
+ leave.s end
+ }
+ catch [mscorlib]System.Exception
+ {
+ stloc.2
+ ldstr "Caught unepxected exception: {0}"
+ ldloc.2
+ callvirt instance string [mscorlib]System.Exception::get_Message()
+ call void [System.Console]System.Console::WriteLine(string,
+ object)
+ ldstr "FAIL"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 101
+ stloc.3
+ leave.s end
+ }
+ end: ldloc.3
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Test::.ctor
+
+} // end of class Test
+
+
+// =============================================================
+
+//*********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file Foo.res
diff --git a/tests/src/Loader/classloader/regressions/139056/Foo.ilproj b/tests/src/Loader/classloader/regressions/139056/Foo.ilproj
new file mode 100644
index 0000000000..96616b3328
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/139056/Foo.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Foo</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Foo.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/144257/vsw144257.cs b/tests/src/Loader/classloader/regressions/144257/vsw144257.cs
new file mode 100644
index 0000000000..51bb22c6a7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/144257/vsw144257.cs
@@ -0,0 +1,42 @@
+// 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.
+
+// this is regression test for VSW1 144257
+// Loading type C resulted in TypeLoadException
+
+using System;
+
+interface I
+{
+ void meth();
+}
+
+class A
+{
+ public void meth(){}
+}
+
+class B : A
+{
+ new private void meth(){}
+}
+
+class C : B, I
+{
+ public static int Main()
+ {
+ try
+ {
+ C c = new C();
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception: " + e);
+ return 101;
+ }
+
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj b/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj
new file mode 100644
index 0000000000..84db903f20
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw144257</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw144257.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs
new file mode 100644
index 0000000000..c865770120
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs
@@ -0,0 +1,112 @@
+// 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.
+
+// created 10/24/2002, mwilk
+using System;
+using System.Text;
+using System.Reflection;
+
+public class MyObject{
+ public const int MY_OBJECT_FOO = 42;
+
+ public int foo(){
+ return MY_OBJECT_FOO;
+ }
+}
+
+public interface IFoo{
+ int foo();
+}
+
+public class SubObject : MyObject, IFoo{
+ // Note that this class claims to implement IFoo but does
+ // not appear to provide an impl for the foo() method.
+ // In this case, the compiler notices that the class extends
+ // MyObject, which does have a method foo() by the same signature,
+ // though it is not necessarily intended to implement the IFoo interface.
+ // the compiler will mark MyObject.foo() as 'virtual final' (use ildasm to prove it
+ // to yourself.), and all this class to inherit the implementation.
+}
+
+public class MySecondObject{
+ public const int MY_SECOND_OBJECT_FOO = 43;
+
+ public int foo(){
+ return MY_SECOND_OBJECT_FOO;
+ }
+}
+
+public class SecondSubObject : MySecondObject, IFoo{
+ public const int MY_SECOND_SUB_OBJECT_FOO = 44;
+
+ // Note that since this class *does* provide an implementation
+ // of foo(), ....
+ public new int foo(){
+ return MY_SECOND_SUB_OBJECT_FOO;
+ }
+}
+
+public class Test{
+ public const int PASS = 100;
+ public const int FAIL = 42;
+
+ public static int Main(){
+
+ // Note: These first two tests are just to demonstrate the principle
+ // behind this bug/regression. If they fail, it is not really critical,
+ // They could be commented out if they ever started failing for some
+ // unknown reason.
+
+ if(typeof(MyObject).GetMethod("foo").IsVirtual){
+ Console.WriteLine("Good. MyObject.foo() is virtual, as expected.");
+ }
+ else{
+ StringBuilder sb = new StringBuilder();
+ sb.Append("Error. MyObject.foo() should have been made virtual ");
+ sb.Append("by the compiler. This is not necessarily an error, but it ");
+ sb.Append("violates the assumptions of this test. As long as ");
+ sb.Append("Object.GetType() is not virtual, you may safely ignore this error, ");
+ sb.Append("or you may be curious to look into why this has changed and update ");
+ sb.Append("this test. (B6CAF320-B776-AB69-FE96-7E3166D9F1B9)");
+ Console.WriteLine(sb.ToString());
+ return FAIL;
+ }
+
+ if(typeof(MySecondObject).GetMethod("foo").IsVirtual){
+ StringBuilder sb = new StringBuilder();
+ sb.Append("Error. MySecondObject.foo() should NOT have been made virtual ");
+ sb.Append("by the compiler. This is not necessarily an error, but it ");
+ sb.Append("violates the assumptions of this test. As long as ");
+ sb.Append("Object.GetType() is not virtual, you may safely ignore this error, ");
+ sb.Append("or you may be curious to look into why this has changed and update ");
+ sb.Append("this test. (522823E1-C992-0EE2-EAE5-E5D3D137116C)");
+ Console.WriteLine(sb.ToString());
+ return FAIL;
+ }
+ else{
+ Console.WriteLine("Good. MySecondObject.foo() is not virtual, as expected.");
+ }
+
+
+ // This is the REAL test. Make sure that Object.GetType() is NOT virtual.
+ if(typeof(Object).GetMethod("GetType").IsVirtual){
+ StringBuilder sb = new StringBuilder();
+ sb.Append("Error. Object.GetType() should NOT have been made virtual ");
+ sb.Append("by the compiler. According to NDPWhidbey bug 14610, this is ");
+ sb.Append("a bug. Perhaps this has resulted from a change in the compiler. ");
+ sb.Append("To investigate, use ildasm to inspect the signature of the Object.GetType ");
+ sb.Append("method in mscorlib.dll for the build that this error has occurred on. ");
+ sb.Append("You should find that the method is erroneously flagged as virtual.");
+ sb.Append("(6E27D9E2-C491-0F89-705C-1C0A66673D9E)");
+ Console.WriteLine(sb.ToString());
+ return FAIL;
+ }
+ else{
+ Console.WriteLine("Good. Object.GetType() is not virtual, as expected.");
+ }
+
+ Console.WriteLine("PASS!");
+ return PASS;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj
new file mode 100644
index 0000000000..64b24ce071
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>TestObjectGetTypeVirtual</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="TestObjectGetTypeVirtual.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il
new file mode 100644
index 0000000000..3af857cb09
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il
@@ -0,0 +1,187 @@
+// 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.
+
+.assembly extern System.Console { }
+// this test is a regression case for VSWhidbey 163172
+// Class A has method f()
+// Class B extends A and explicitly implements A::f() (with B::g()) B::g() is final
+// Class C extends B and implicitly implements A::f()
+// Class D extends A and implicitly implements A::f()
+
+// The final on B::g() causd the target slot (A::f()) to be marked final as well and we got
+// TypeLoadException when instantiating C and D
+
+
+
+// Metadata version: v1.2.30801
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .hash = (BB F5 50 CF 5C DC 3F F4 03 2C 76 78 5A 79 37 C7 // ..P.\.?..,vxZy7.
+ A4 08 4B CE ) // ..K.
+ .ver 1:2:3400:0
+}
+.assembly MethodImplFinal
+{
+ .permissionset reqmin
+ "<PermissionSet class=\"System.Security.PermissionSe"
+ + "t\"\r\nversion=\"1\">\r\n<IPermission class=\"System.Security.Permis"
+ + "sions.SecurityPermission, mscorlib, Version=1.2.3400.0, Cult"
+ + "ure=neutral, PublicKeyToken=b77a5c561934e089\"\r\nversion=\"1\"\r\n"
+ + "Flags=\"SkipVerification\"/>\r\n</PermissionSet>\r\n"
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module MethodImplFinal.exe
+
+
+// ================== GLOBAL METHODS =========================
+
+.method public static int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
+ main() cil managed
+ {
+ .entrypoint
+
+ // Code size 42 (0x2a)
+ .maxstack 2
+ .locals init (class [mscorlib]System.Exception V_0,
+ int32 V_1)
+ .try
+ {
+
+ newobj instance void C::.ctor()
+ pop
+ newobj instance void D::.ctor()
+ pop
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ nop
+ ldc.i4.s 100
+ stloc.1
+ leave.s IL_0027
+
+ } // end .try
+ catch [mscorlib]System.Exception
+ {
+ stloc.0
+ ldstr "FAIL: Caught unexpected exception: "
+ ldloc.0
+ call string [mscorlib]System.String::Concat(object,
+ object)
+ call void [System.Console]System.Console::WriteLine(string)
+ nop
+ ldc.i4.s 101
+ stloc.1
+ IL_0025: leave.s IL_0027
+
+ } // end handler
+ IL_0027: nop
+ ldloc.1
+ ret
+} // end of global method main
+
+
+// =============================================================
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi A
+ extends [mscorlib]System.Object
+{
+ .method public newslot virtual instance void
+ f() cil managed
+ {
+ // Code size 1 (0x1)
+ .maxstack 0
+ ret
+ } // end of method A::f
+
+ .method public specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 1
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ } // end of method A::.ctor
+
+} // end of class A
+
+.class public auto ansi B
+ extends A
+{
+ .method public newslot virtual final instance void
+ g() cil managed
+ {
+ .override A::f
+ // Code size 1 (0x1)
+ .maxstack 0
+ ret
+ } // end of method B::g
+
+ .method public specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 1
+ ldarg.0
+ call instance void A::.ctor()
+ ret
+ } // end of method B::.ctor
+
+} // end of class B
+
+.class public auto ansi C
+ extends B
+{
+ .method public virtual instance void f() cil managed
+ {
+ // Code size 1 (0x1)
+ .maxstack 0
+ ret
+ } // end of method C::f
+
+ .method public specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 1
+ ldarg.0
+ call instance void B::.ctor()
+ ret
+ } // end of method C::.ctor
+
+} // end of class C
+
+
+.class public auto ansi D
+ extends A
+{
+ .method public virtual instance void f() cil managed
+ {
+ // Code size 1 (0x1)
+ .maxstack 0
+ ret
+ } // end of method C::f
+
+ .method public specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 1
+ ldarg.0
+ call instance void A::.ctor()
+ ret
+ } // end of method C::.ctor
+
+} // end of class C
+
+
+// =============================================================
+
+.data D_00008030 = bytearray (
+ 01 00 00 06)
+//*********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj
new file mode 100644
index 0000000000..55fb3f30d7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>MethodImplFinal</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="MethodImplFinal.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/181424/test5.il b/tests/src/Loader/classloader/regressions/181424/test5.il
new file mode 100644
index 0000000000..5fe54b8588
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/181424/test5.il
@@ -0,0 +1,96 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly test5{}
+.assembly extern test5{}
+.assembly extern mscorlib{}
+
+// In this module, we define types Foo and Bar. We'll use PEHacker to postprocess
+// the executable that results from this, changing the name of Bar to Foo. Then,
+// we have two entirely different types that happen to have the same name in the
+// same namespace.
+//
+// In Main, we have three tests.
+// The first two effective load types Foo and (what originally was:) Bar.
+// TypeDefs are used here, so the IL code will actually contain tokens to the
+// respective types. This works fine.
+// But in the third test, we try to use Foo through a TypeRef whose resolution scope
+// is 'this' assembly, thereby trying to load type Foo by name. But this is ambiguous,
+// since both types (after our postprocessing) have the name Foo. Originally, the runtime
+// just took the first one it found, giving us no way to load the second one by name.
+// Thus, VSWhidbey 181424 was filed to disallow this scenario.
+// We expected a TypeLoadException now when trying to load two types that have the same
+// name in the same namespace.
+
+.class public Bar extends [mscorlib]System.Object{
+ .field public int32 i
+ .method public specialname instance void .ctor(){
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ldarg.0
+ ldc.i4.s 2
+ stfld int32 Bar::i
+ ret
+ }
+}
+
+.class public Foo extends [mscorlib]System.Object{
+ .field public int32 i
+ .method public specialname instance void .ctor(){
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ldarg.0
+ ldc.i4.s 3
+ stfld int32 Foo::i
+ ret
+ }
+}
+
+.method public static int32 Main(){
+ .entrypoint
+ .locals init(int32 retVal)
+ // there's no way to get to Foo through TypeRef
+ ldc.i4 100 // default pass
+ stloc retVal
+ newobj instance void Foo::.ctor()
+ ldfld int32 Foo::i
+ ldc.i4.s 3
+ beq NEXT1
+ ldc.i4 101
+ stloc retVal
+ ldstr "FAIL: (Type 0x02000003) i != 3"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ NEXT1:
+ newobj instance void Bar::.ctor()
+ ldfld int32 Bar::i
+ ldc.i4.s 2
+ beq NEXT2
+ ldc.i4 101
+ stloc retVal
+ ldstr "FAIL: (Type 0x02000002) i != 2"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ NEXT2:
+ newobj instance void [test5]Foo::.ctor()
+ ldfld int32 [test5]Foo::i
+ ldc.i4.s 3
+ beq NEXT3
+ ldc.i4 101
+ stloc retVal
+ ldstr "FAIL: (TypeRef to Foo) i != 3"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ NEXT3:
+ ldloc retVal
+ ldc.i4 100
+ bne.un END
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ END:
+ ldloc retVal
+ ret
+}
diff --git a/tests/src/Loader/classloader/regressions/181424/test5.ilproj b/tests/src/Loader/classloader/regressions/181424/test5.ilproj
new file mode 100644
index 0000000000..be13df5fce
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/181424/test5.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test5</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test5.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/208900/bug.cs b/tests/src/Loader/classloader/regressions/208900/bug.cs
new file mode 100644
index 0000000000..7c0d7c57ea
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/208900/bug.cs
@@ -0,0 +1,43 @@
+// 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.
+
+// Regression test for bug VSWhidbey 208900
+// "Corrupt OBJECTREF when calling a virtual generic method instantiated at a struct which returns that struct"
+
+#pragma warning disable 0414
+using System;
+
+struct MyStruct
+{
+ public MyStruct(object _f1, int _f2) { f1 = _f1; f2 = _f2; }
+ object f1;
+ int f2;
+}
+
+
+class M
+{
+ public virtual U GenericMethod<U>(U x1) { return x1; }
+}
+
+class Test
+{
+
+ static int Main()
+ {
+ M obj = new M();
+ MyStruct myStruct = new MyStruct("obj", 787980);
+ if(obj.GenericMethod<MyStruct>(myStruct).Equals(myStruct)){
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else{
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+
+}
+
+
diff --git a/tests/src/Loader/classloader/regressions/208900/bug.csproj b/tests/src/Loader/classloader/regressions/208900/bug.csproj
new file mode 100644
index 0000000000..25ec264eec
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/208900/bug.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>bug</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="bug.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/226741/test3.il b/tests/src/Loader/classloader/regressions/226741/test3.il
new file mode 100644
index 0000000000..479f738620
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/226741/test3.il
@@ -0,0 +1,24 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly test3{}
+.assembly extern mscorlib{}
+
+.class public CMain{
+ .method public static int32 Main(){
+ .entrypoint
+ call int32 IFoo::Foo()
+ ret
+ }
+}
+
+.class public interface IFoo{
+ .method public static int32 Foo(){
+ ldstr "PASS: In IFoo::Foo"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4 100
+ ret
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/226741/test3.ilproj b/tests/src/Loader/classloader/regressions/226741/test3.ilproj
new file mode 100644
index 0000000000..c25f9935eb
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/226741/test3.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test3</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test3.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs b/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs
new file mode 100644
index 0000000000..63d7091831
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs
@@ -0,0 +1,7043 @@
+// 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.
+
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.CompilerServices;
+using System.Threading;
+
+public enum T0 { }
+public enum T1 { }
+public enum T2 { }
+public enum T3 { }
+public enum T4 { }
+public enum T5 { }
+public enum T6 { }
+public enum T7 { }
+public enum T8 { }
+public enum T9 { }
+public enum T10 { }
+public enum T11 { }
+public enum T12 { }
+public enum T13 { }
+public enum T14 { }
+public enum T15 { }
+public enum T16 { }
+public enum T17 { }
+public enum T18 { }
+public enum T19 { }
+public enum T20 { }
+public enum T21 { }
+public enum T22 { }
+public enum T23 { }
+public enum T24 { }
+public enum T25 { }
+public enum T26 { }
+public enum T27 { }
+public enum T28 { }
+public enum T29 { }
+public enum T30 { }
+public enum T31 { }
+public enum T32 { }
+public enum T33 { }
+public enum T34 { }
+public enum T35 { }
+public enum T36 { }
+public enum T37 { }
+public enum T38 { }
+public enum T39 { }
+public enum T40 { }
+public enum T41 { }
+public enum T42 { }
+public enum T43 { }
+public enum T44 { }
+public enum T45 { }
+public enum T46 { }
+public enum T47 { }
+public enum T48 { }
+public enum T49 { }
+public enum T50 { }
+public enum T51 { }
+public enum T52 { }
+public enum T53 { }
+public enum T54 { }
+public enum T55 { }
+public enum T56 { }
+public enum T57 { }
+public enum T58 { }
+public enum T59 { }
+public enum T60 { }
+public enum T61 { }
+public enum T62 { }
+public enum T63 { }
+public enum T64 { }
+public enum T65 { }
+public enum T66 { }
+public enum T67 { }
+public enum T68 { }
+public enum T69 { }
+public enum T70 { }
+public enum T71 { }
+public enum T72 { }
+public enum T73 { }
+public enum T74 { }
+public enum T75 { }
+public enum T76 { }
+public enum T77 { }
+public enum T78 { }
+public enum T79 { }
+public enum T80 { }
+public enum T81 { }
+public enum T82 { }
+public enum T83 { }
+public enum T84 { }
+public enum T85 { }
+public enum T86 { }
+public enum T87 { }
+public enum T88 { }
+public enum T89 { }
+public enum T90 { }
+public enum T91 { }
+public enum T92 { }
+public enum T93 { }
+public enum T94 { }
+public enum T95 { }
+public enum T96 { }
+public enum T97 { }
+public enum T98 { }
+public enum T99 { }
+public enum T100 { }
+public enum T101 { }
+public enum T102 { }
+public enum T103 { }
+public enum T104 { }
+public enum T105 { }
+public enum T106 { }
+public enum T107 { }
+public enum T108 { }
+public enum T109 { }
+public enum T110 { }
+public enum T111 { }
+public enum T112 { }
+public enum T113 { }
+public enum T114 { }
+public enum T115 { }
+public enum T116 { }
+public enum T117 { }
+public enum T118 { }
+public enum T119 { }
+public enum T120 { }
+public enum T121 { }
+public enum T122 { }
+public enum T123 { }
+public enum T124 { }
+public enum T125 { }
+public enum T126 { }
+public enum T127 { }
+public enum T128 { }
+public enum T129 { }
+public enum T130 { }
+public enum T131 { }
+public enum T132 { }
+public enum T133 { }
+public enum T134 { }
+public enum T135 { }
+public enum T136 { }
+public enum T137 { }
+public enum T138 { }
+public enum T139 { }
+public enum T140 { }
+public enum T141 { }
+public enum T142 { }
+public enum T143 { }
+public enum T144 { }
+public enum T145 { }
+public enum T146 { }
+public enum T147 { }
+public enum T148 { }
+public enum T149 { }
+public enum T150 { }
+public enum T151 { }
+public enum T152 { }
+public enum T153 { }
+public enum T154 { }
+public enum T155 { }
+public enum T156 { }
+public enum T157 { }
+public enum T158 { }
+public enum T159 { }
+public enum T160 { }
+public enum T161 { }
+public enum T162 { }
+public enum T163 { }
+public enum T164 { }
+public enum T165 { }
+public enum T166 { }
+public enum T167 { }
+public enum T168 { }
+public enum T169 { }
+public enum T170 { }
+public enum T171 { }
+public enum T172 { }
+public enum T173 { }
+public enum T174 { }
+public enum T175 { }
+public enum T176 { }
+public enum T177 { }
+public enum T178 { }
+public enum T179 { }
+public enum T180 { }
+public enum T181 { }
+public enum T182 { }
+public enum T183 { }
+public enum T184 { }
+public enum T185 { }
+public enum T186 { }
+public enum T187 { }
+public enum T188 { }
+public enum T189 { }
+public enum T190 { }
+public enum T191 { }
+public enum T192 { }
+public enum T193 { }
+public enum T194 { }
+public enum T195 { }
+public enum T196 { }
+public enum T197 { }
+public enum T198 { }
+public enum T199 { }
+public enum T200 { }
+public enum T201 { }
+public enum T202 { }
+public enum T203 { }
+public enum T204 { }
+public enum T205 { }
+public enum T206 { }
+public enum T207 { }
+public enum T208 { }
+public enum T209 { }
+public enum T210 { }
+public enum T211 { }
+public enum T212 { }
+public enum T213 { }
+public enum T214 { }
+public enum T215 { }
+public enum T216 { }
+public enum T217 { }
+public enum T218 { }
+public enum T219 { }
+public enum T220 { }
+public enum T221 { }
+public enum T222 { }
+public enum T223 { }
+public enum T224 { }
+public enum T225 { }
+public enum T226 { }
+public enum T227 { }
+public enum T228 { }
+public enum T229 { }
+public enum T230 { }
+public enum T231 { }
+public enum T232 { }
+public enum T233 { }
+public enum T234 { }
+public enum T235 { }
+public enum T236 { }
+public enum T237 { }
+public enum T238 { }
+public enum T239 { }
+public enum T240 { }
+public enum T241 { }
+public enum T242 { }
+public enum T243 { }
+public enum T244 { }
+public enum T245 { }
+public enum T246 { }
+public enum T247 { }
+public enum T248 { }
+public enum T249 { }
+public enum T250 { }
+public enum T251 { }
+public enum T252 { }
+public enum T253 { }
+public enum T254 { }
+public enum T255 { }
+public enum T256 { }
+public enum T257 { }
+public enum T258 { }
+public enum T259 { }
+public enum T260 { }
+public enum T261 { }
+public enum T262 { }
+public enum T263 { }
+public enum T264 { }
+public enum T265 { }
+public enum T266 { }
+public enum T267 { }
+public enum T268 { }
+public enum T269 { }
+public enum T270 { }
+public enum T271 { }
+public enum T272 { }
+public enum T273 { }
+public enum T274 { }
+public enum T275 { }
+public enum T276 { }
+public enum T277 { }
+public enum T278 { }
+public enum T279 { }
+public enum T280 { }
+public enum T281 { }
+public enum T282 { }
+public enum T283 { }
+public enum T284 { }
+public enum T285 { }
+public enum T286 { }
+public enum T287 { }
+public enum T288 { }
+public enum T289 { }
+public enum T290 { }
+public enum T291 { }
+public enum T292 { }
+public enum T293 { }
+public enum T294 { }
+public enum T295 { }
+public enum T296 { }
+public enum T297 { }
+public enum T298 { }
+public enum T299 { }
+public enum T300 { }
+public enum T301 { }
+public enum T302 { }
+public enum T303 { }
+public enum T304 { }
+public enum T305 { }
+public enum T306 { }
+public enum T307 { }
+public enum T308 { }
+public enum T309 { }
+public enum T310 { }
+public enum T311 { }
+public enum T312 { }
+public enum T313 { }
+public enum T314 { }
+public enum T315 { }
+public enum T316 { }
+public enum T317 { }
+public enum T318 { }
+public enum T319 { }
+public enum T320 { }
+public enum T321 { }
+public enum T322 { }
+public enum T323 { }
+public enum T324 { }
+public enum T325 { }
+public enum T326 { }
+public enum T327 { }
+public enum T328 { }
+public enum T329 { }
+public enum T330 { }
+public enum T331 { }
+public enum T332 { }
+public enum T333 { }
+public enum T334 { }
+public enum T335 { }
+public enum T336 { }
+public enum T337 { }
+public enum T338 { }
+public enum T339 { }
+public enum T340 { }
+public enum T341 { }
+public enum T342 { }
+public enum T343 { }
+public enum T344 { }
+public enum T345 { }
+public enum T346 { }
+public enum T347 { }
+public enum T348 { }
+public enum T349 { }
+public enum T350 { }
+public enum T351 { }
+public enum T352 { }
+public enum T353 { }
+public enum T354 { }
+public enum T355 { }
+public enum T356 { }
+public enum T357 { }
+public enum T358 { }
+public enum T359 { }
+public enum T360 { }
+public enum T361 { }
+public enum T362 { }
+public enum T363 { }
+public enum T364 { }
+public enum T365 { }
+public enum T366 { }
+public enum T367 { }
+public enum T368 { }
+public enum T369 { }
+public enum T370 { }
+public enum T371 { }
+public enum T372 { }
+public enum T373 { }
+public enum T374 { }
+public enum T375 { }
+public enum T376 { }
+public enum T377 { }
+public enum T378 { }
+public enum T379 { }
+public enum T380 { }
+public enum T381 { }
+public enum T382 { }
+public enum T383 { }
+public enum T384 { }
+public enum T385 { }
+public enum T386 { }
+public enum T387 { }
+public enum T388 { }
+public enum T389 { }
+public enum T390 { }
+public enum T391 { }
+public enum T392 { }
+public enum T393 { }
+public enum T394 { }
+public enum T395 { }
+public enum T396 { }
+public enum T397 { }
+public enum T398 { }
+public enum T399 { }
+public enum T400 { }
+public enum T401 { }
+public enum T402 { }
+public enum T403 { }
+public enum T404 { }
+public enum T405 { }
+public enum T406 { }
+public enum T407 { }
+public enum T408 { }
+public enum T409 { }
+public enum T410 { }
+public enum T411 { }
+public enum T412 { }
+public enum T413 { }
+public enum T414 { }
+public enum T415 { }
+public enum T416 { }
+public enum T417 { }
+public enum T418 { }
+public enum T419 { }
+public enum T420 { }
+public enum T421 { }
+public enum T422 { }
+public enum T423 { }
+public enum T424 { }
+public enum T425 { }
+public enum T426 { }
+public enum T427 { }
+public enum T428 { }
+public enum T429 { }
+public enum T430 { }
+public enum T431 { }
+public enum T432 { }
+public enum T433 { }
+public enum T434 { }
+public enum T435 { }
+public enum T436 { }
+public enum T437 { }
+public enum T438 { }
+public enum T439 { }
+public enum T440 { }
+public enum T441 { }
+public enum T442 { }
+public enum T443 { }
+public enum T444 { }
+public enum T445 { }
+public enum T446 { }
+public enum T447 { }
+public enum T448 { }
+public enum T449 { }
+public enum T450 { }
+public enum T451 { }
+public enum T452 { }
+public enum T453 { }
+public enum T454 { }
+public enum T455 { }
+public enum T456 { }
+public enum T457 { }
+public enum T458 { }
+public enum T459 { }
+public enum T460 { }
+public enum T461 { }
+public enum T462 { }
+public enum T463 { }
+public enum T464 { }
+public enum T465 { }
+public enum T466 { }
+public enum T467 { }
+public enum T468 { }
+public enum T469 { }
+public enum T470 { }
+public enum T471 { }
+public enum T472 { }
+public enum T473 { }
+public enum T474 { }
+public enum T475 { }
+public enum T476 { }
+public enum T477 { }
+public enum T478 { }
+public enum T479 { }
+public enum T480 { }
+public enum T481 { }
+public enum T482 { }
+public enum T483 { }
+public enum T484 { }
+public enum T485 { }
+public enum T486 { }
+public enum T487 { }
+public enum T488 { }
+public enum T489 { }
+public enum T490 { }
+public enum T491 { }
+public enum T492 { }
+public enum T493 { }
+public enum T494 { }
+public enum T495 { }
+public enum T496 { }
+public enum T497 { }
+public enum T498 { }
+public enum T499 { }
+public enum T500 { }
+public enum T501 { }
+public enum T502 { }
+public enum T503 { }
+public enum T504 { }
+public enum T505 { }
+public enum T506 { }
+public enum T507 { }
+public enum T508 { }
+public enum T509 { }
+public enum T510 { }
+public enum T511 { }
+public enum T512 { }
+public enum T513 { }
+public enum T514 { }
+public enum T515 { }
+public enum T516 { }
+public enum T517 { }
+public enum T518 { }
+public enum T519 { }
+public enum T520 { }
+public enum T521 { }
+public enum T522 { }
+public enum T523 { }
+public enum T524 { }
+public enum T525 { }
+public enum T526 { }
+public enum T527 { }
+public enum T528 { }
+public enum T529 { }
+public enum T530 { }
+public enum T531 { }
+public enum T532 { }
+public enum T533 { }
+public enum T534 { }
+public enum T535 { }
+public enum T536 { }
+public enum T537 { }
+public enum T538 { }
+public enum T539 { }
+public enum T540 { }
+public enum T541 { }
+public enum T542 { }
+public enum T543 { }
+public enum T544 { }
+public enum T545 { }
+public enum T546 { }
+public enum T547 { }
+public enum T548 { }
+public enum T549 { }
+public enum T550 { }
+public enum T551 { }
+public enum T552 { }
+public enum T553 { }
+public enum T554 { }
+public enum T555 { }
+public enum T556 { }
+public enum T557 { }
+public enum T558 { }
+public enum T559 { }
+public enum T560 { }
+public enum T561 { }
+public enum T562 { }
+public enum T563 { }
+public enum T564 { }
+public enum T565 { }
+public enum T566 { }
+public enum T567 { }
+public enum T568 { }
+public enum T569 { }
+public enum T570 { }
+public enum T571 { }
+public enum T572 { }
+public enum T573 { }
+public enum T574 { }
+public enum T575 { }
+public enum T576 { }
+public enum T577 { }
+public enum T578 { }
+public enum T579 { }
+public enum T580 { }
+public enum T581 { }
+public enum T582 { }
+public enum T583 { }
+public enum T584 { }
+public enum T585 { }
+public enum T586 { }
+public enum T587 { }
+public enum T588 { }
+public enum T589 { }
+public enum T590 { }
+public enum T591 { }
+public enum T592 { }
+public enum T593 { }
+public enum T594 { }
+public enum T595 { }
+public enum T596 { }
+public enum T597 { }
+public enum T598 { }
+public enum T599 { }
+public enum T600 { }
+public enum T601 { }
+public enum T602 { }
+public enum T603 { }
+public enum T604 { }
+public enum T605 { }
+public enum T606 { }
+public enum T607 { }
+public enum T608 { }
+public enum T609 { }
+public enum T610 { }
+public enum T611 { }
+public enum T612 { }
+public enum T613 { }
+public enum T614 { }
+public enum T615 { }
+public enum T616 { }
+public enum T617 { }
+public enum T618 { }
+public enum T619 { }
+public enum T620 { }
+public enum T621 { }
+public enum T622 { }
+public enum T623 { }
+public enum T624 { }
+public enum T625 { }
+public enum T626 { }
+public enum T627 { }
+public enum T628 { }
+public enum T629 { }
+public enum T630 { }
+public enum T631 { }
+public enum T632 { }
+public enum T633 { }
+public enum T634 { }
+public enum T635 { }
+public enum T636 { }
+public enum T637 { }
+public enum T638 { }
+public enum T639 { }
+public enum T640 { }
+public enum T641 { }
+public enum T642 { }
+public enum T643 { }
+public enum T644 { }
+public enum T645 { }
+public enum T646 { }
+public enum T647 { }
+public enum T648 { }
+public enum T649 { }
+public enum T650 { }
+public enum T651 { }
+public enum T652 { }
+public enum T653 { }
+public enum T654 { }
+public enum T655 { }
+public enum T656 { }
+public enum T657 { }
+public enum T658 { }
+public enum T659 { }
+public enum T660 { }
+public enum T661 { }
+public enum T662 { }
+public enum T663 { }
+public enum T664 { }
+public enum T665 { }
+public enum T666 { }
+public enum T667 { }
+public enum T668 { }
+public enum T669 { }
+public enum T670 { }
+public enum T671 { }
+public enum T672 { }
+public enum T673 { }
+public enum T674 { }
+public enum T675 { }
+public enum T676 { }
+public enum T677 { }
+public enum T678 { }
+public enum T679 { }
+public enum T680 { }
+public enum T681 { }
+public enum T682 { }
+public enum T683 { }
+public enum T684 { }
+public enum T685 { }
+public enum T686 { }
+public enum T687 { }
+public enum T688 { }
+public enum T689 { }
+public enum T690 { }
+public enum T691 { }
+public enum T692 { }
+public enum T693 { }
+public enum T694 { }
+public enum T695 { }
+public enum T696 { }
+public enum T697 { }
+public enum T698 { }
+public enum T699 { }
+public enum T700 { }
+public enum T701 { }
+public enum T702 { }
+public enum T703 { }
+public enum T704 { }
+public enum T705 { }
+public enum T706 { }
+public enum T707 { }
+public enum T708 { }
+public enum T709 { }
+public enum T710 { }
+public enum T711 { }
+public enum T712 { }
+public enum T713 { }
+public enum T714 { }
+public enum T715 { }
+public enum T716 { }
+public enum T717 { }
+public enum T718 { }
+public enum T719 { }
+public enum T720 { }
+public enum T721 { }
+public enum T722 { }
+public enum T723 { }
+public enum T724 { }
+public enum T725 { }
+public enum T726 { }
+public enum T727 { }
+public enum T728 { }
+public enum T729 { }
+public enum T730 { }
+public enum T731 { }
+public enum T732 { }
+public enum T733 { }
+public enum T734 { }
+public enum T735 { }
+public enum T736 { }
+public enum T737 { }
+public enum T738 { }
+public enum T739 { }
+public enum T740 { }
+public enum T741 { }
+public enum T742 { }
+public enum T743 { }
+public enum T744 { }
+public enum T745 { }
+public enum T746 { }
+public enum T747 { }
+public enum T748 { }
+public enum T749 { }
+public enum T750 { }
+public enum T751 { }
+public enum T752 { }
+public enum T753 { }
+public enum T754 { }
+public enum T755 { }
+public enum T756 { }
+public enum T757 { }
+public enum T758 { }
+public enum T759 { }
+public enum T760 { }
+public enum T761 { }
+public enum T762 { }
+public enum T763 { }
+public enum T764 { }
+public enum T765 { }
+public enum T766 { }
+public enum T767 { }
+public enum T768 { }
+public enum T769 { }
+public enum T770 { }
+public enum T771 { }
+public enum T772 { }
+public enum T773 { }
+public enum T774 { }
+public enum T775 { }
+public enum T776 { }
+public enum T777 { }
+public enum T778 { }
+public enum T779 { }
+public enum T780 { }
+public enum T781 { }
+public enum T782 { }
+public enum T783 { }
+public enum T784 { }
+public enum T785 { }
+public enum T786 { }
+public enum T787 { }
+public enum T788 { }
+public enum T789 { }
+public enum T790 { }
+public enum T791 { }
+public enum T792 { }
+public enum T793 { }
+public enum T794 { }
+public enum T795 { }
+public enum T796 { }
+public enum T797 { }
+public enum T798 { }
+public enum T799 { }
+public enum T800 { }
+public enum T801 { }
+public enum T802 { }
+public enum T803 { }
+public enum T804 { }
+public enum T805 { }
+public enum T806 { }
+public enum T807 { }
+public enum T808 { }
+public enum T809 { }
+public enum T810 { }
+public enum T811 { }
+public enum T812 { }
+public enum T813 { }
+public enum T814 { }
+public enum T815 { }
+public enum T816 { }
+public enum T817 { }
+public enum T818 { }
+public enum T819 { }
+public enum T820 { }
+public enum T821 { }
+public enum T822 { }
+public enum T823 { }
+public enum T824 { }
+public enum T825 { }
+public enum T826 { }
+public enum T827 { }
+public enum T828 { }
+public enum T829 { }
+public enum T830 { }
+public enum T831 { }
+public enum T832 { }
+public enum T833 { }
+public enum T834 { }
+public enum T835 { }
+public enum T836 { }
+public enum T837 { }
+public enum T838 { }
+public enum T839 { }
+public enum T840 { }
+public enum T841 { }
+public enum T842 { }
+public enum T843 { }
+public enum T844 { }
+public enum T845 { }
+public enum T846 { }
+public enum T847 { }
+public enum T848 { }
+public enum T849 { }
+public enum T850 { }
+public enum T851 { }
+public enum T852 { }
+public enum T853 { }
+public enum T854 { }
+public enum T855 { }
+public enum T856 { }
+public enum T857 { }
+public enum T858 { }
+public enum T859 { }
+public enum T860 { }
+public enum T861 { }
+public enum T862 { }
+public enum T863 { }
+public enum T864 { }
+public enum T865 { }
+public enum T866 { }
+public enum T867 { }
+public enum T868 { }
+public enum T869 { }
+public enum T870 { }
+public enum T871 { }
+public enum T872 { }
+public enum T873 { }
+public enum T874 { }
+public enum T875 { }
+public enum T876 { }
+public enum T877 { }
+public enum T878 { }
+public enum T879 { }
+public enum T880 { }
+public enum T881 { }
+public enum T882 { }
+public enum T883 { }
+public enum T884 { }
+public enum T885 { }
+public enum T886 { }
+public enum T887 { }
+public enum T888 { }
+public enum T889 { }
+public enum T890 { }
+public enum T891 { }
+public enum T892 { }
+public enum T893 { }
+public enum T894 { }
+public enum T895 { }
+public enum T896 { }
+public enum T897 { }
+public enum T898 { }
+public enum T899 { }
+public enum T900 { }
+public enum T901 { }
+public enum T902 { }
+public enum T903 { }
+public enum T904 { }
+public enum T905 { }
+public enum T906 { }
+public enum T907 { }
+public enum T908 { }
+public enum T909 { }
+public enum T910 { }
+public enum T911 { }
+public enum T912 { }
+public enum T913 { }
+public enum T914 { }
+public enum T915 { }
+public enum T916 { }
+public enum T917 { }
+public enum T918 { }
+public enum T919 { }
+public enum T920 { }
+public enum T921 { }
+public enum T922 { }
+public enum T923 { }
+public enum T924 { }
+public enum T925 { }
+public enum T926 { }
+public enum T927 { }
+public enum T928 { }
+public enum T929 { }
+public enum T930 { }
+public enum T931 { }
+public enum T932 { }
+public enum T933 { }
+public enum T934 { }
+public enum T935 { }
+public enum T936 { }
+public enum T937 { }
+public enum T938 { }
+public enum T939 { }
+public enum T940 { }
+public enum T941 { }
+public enum T942 { }
+public enum T943 { }
+public enum T944 { }
+public enum T945 { }
+public enum T946 { }
+public enum T947 { }
+public enum T948 { }
+public enum T949 { }
+public enum T950 { }
+public enum T951 { }
+public enum T952 { }
+public enum T953 { }
+public enum T954 { }
+public enum T955 { }
+public enum T956 { }
+public enum T957 { }
+public enum T958 { }
+public enum T959 { }
+public enum T960 { }
+public enum T961 { }
+public enum T962 { }
+public enum T963 { }
+public enum T964 { }
+public enum T965 { }
+public enum T966 { }
+public enum T967 { }
+public enum T968 { }
+public enum T969 { }
+public enum T970 { }
+public enum T971 { }
+public enum T972 { }
+public enum T973 { }
+public enum T974 { }
+public enum T975 { }
+public enum T976 { }
+public enum T977 { }
+public enum T978 { }
+public enum T979 { }
+public enum T980 { }
+public enum T981 { }
+public enum T982 { }
+public enum T983 { }
+public enum T984 { }
+public enum T985 { }
+public enum T986 { }
+public enum T987 { }
+public enum T988 { }
+public enum T989 { }
+public enum T990 { }
+public enum T991 { }
+public enum T992 { }
+public enum T993 { }
+public enum T994 { }
+public enum T995 { }
+public enum T996 { }
+public enum T997 { }
+public enum T998 { }
+public enum T999 { }
+
+public class Test {
+ public static int Main()
+ {
+ try
+ {
+ Do0(new T0());
+ Do1(new T1());
+ Do2(new T2());
+ Do3(new T3());
+ Do4(new T4());
+ Do5(new T5());
+ Do6(new T6());
+ Do7(new T7());
+ Do8(new T8());
+ Do9(new T9());
+ Do10(new T10());
+ Do11(new T11());
+ Do12(new T12());
+ Do13(new T13());
+ Do14(new T14());
+ Do15(new T15());
+ Do16(new T16());
+ Do17(new T17());
+ Do18(new T18());
+ Do19(new T19());
+ Do20(new T20());
+ Do21(new T21());
+ Do22(new T22());
+ Do23(new T23());
+ Do24(new T24());
+ Do25(new T25());
+ Do26(new T26());
+ Do27(new T27());
+ Do28(new T28());
+ Do29(new T29());
+ Do30(new T30());
+ Do31(new T31());
+ Do32(new T32());
+ Do33(new T33());
+ Do34(new T34());
+ Do35(new T35());
+ Do36(new T36());
+ Do37(new T37());
+ Do38(new T38());
+ Do39(new T39());
+ Do40(new T40());
+ Do41(new T41());
+ Do42(new T42());
+ Do43(new T43());
+ Do44(new T44());
+ Do45(new T45());
+ Do46(new T46());
+ Do47(new T47());
+ Do48(new T48());
+ Do49(new T49());
+ Do50(new T50());
+ Do51(new T51());
+ Do52(new T52());
+ Do53(new T53());
+ Do54(new T54());
+ Do55(new T55());
+ Do56(new T56());
+ Do57(new T57());
+ Do58(new T58());
+ Do59(new T59());
+ Do60(new T60());
+ Do61(new T61());
+ Do62(new T62());
+ Do63(new T63());
+ Do64(new T64());
+ Do65(new T65());
+ Do66(new T66());
+ Do67(new T67());
+ Do68(new T68());
+ Do69(new T69());
+ Do70(new T70());
+ Do71(new T71());
+ Do72(new T72());
+ Do73(new T73());
+ Do74(new T74());
+ Do75(new T75());
+ Do76(new T76());
+ Do77(new T77());
+ Do78(new T78());
+ Do79(new T79());
+ Do80(new T80());
+ Do81(new T81());
+ Do82(new T82());
+ Do83(new T83());
+ Do84(new T84());
+ Do85(new T85());
+ Do86(new T86());
+ Do87(new T87());
+ Do88(new T88());
+ Do89(new T89());
+ Do90(new T90());
+ Do91(new T91());
+ Do92(new T92());
+ Do93(new T93());
+ Do94(new T94());
+ Do95(new T95());
+ Do96(new T96());
+ Do97(new T97());
+ Do98(new T98());
+ Do99(new T99());
+ Do100(new T100());
+ Do101(new T101());
+ Do102(new T102());
+ Do103(new T103());
+ Do104(new T104());
+ Do105(new T105());
+ Do106(new T106());
+ Do107(new T107());
+ Do108(new T108());
+ Do109(new T109());
+ Do110(new T110());
+ Do111(new T111());
+ Do112(new T112());
+ Do113(new T113());
+ Do114(new T114());
+ Do115(new T115());
+ Do116(new T116());
+ Do117(new T117());
+ Do118(new T118());
+ Do119(new T119());
+ Do120(new T120());
+ Do121(new T121());
+ Do122(new T122());
+ Do123(new T123());
+ Do124(new T124());
+ Do125(new T125());
+ Do126(new T126());
+ Do127(new T127());
+ Do128(new T128());
+ Do129(new T129());
+ Do130(new T130());
+ Do131(new T131());
+ Do132(new T132());
+ Do133(new T133());
+ Do134(new T134());
+ Do135(new T135());
+ Do136(new T136());
+ Do137(new T137());
+ Do138(new T138());
+ Do139(new T139());
+ Do140(new T140());
+ Do141(new T141());
+ Do142(new T142());
+ Do143(new T143());
+ Do144(new T144());
+ Do145(new T145());
+ Do146(new T146());
+ Do147(new T147());
+ Do148(new T148());
+ Do149(new T149());
+ Do150(new T150());
+ Do151(new T151());
+ Do152(new T152());
+ Do153(new T153());
+ Do154(new T154());
+ Do155(new T155());
+ Do156(new T156());
+ Do157(new T157());
+ Do158(new T158());
+ Do159(new T159());
+ Do160(new T160());
+ Do161(new T161());
+ Do162(new T162());
+ Do163(new T163());
+ Do164(new T164());
+ Do165(new T165());
+ Do166(new T166());
+ Do167(new T167());
+ Do168(new T168());
+ Do169(new T169());
+ Do170(new T170());
+ Do171(new T171());
+ Do172(new T172());
+ Do173(new T173());
+ Do174(new T174());
+ Do175(new T175());
+ Do176(new T176());
+ Do177(new T177());
+ Do178(new T178());
+ Do179(new T179());
+ Do180(new T180());
+ Do181(new T181());
+ Do182(new T182());
+ Do183(new T183());
+ Do184(new T184());
+ Do185(new T185());
+ Do186(new T186());
+ Do187(new T187());
+ Do188(new T188());
+ Do189(new T189());
+ Do190(new T190());
+ Do191(new T191());
+ Do192(new T192());
+ Do193(new T193());
+ Do194(new T194());
+ Do195(new T195());
+ Do196(new T196());
+ Do197(new T197());
+ Do198(new T198());
+ Do199(new T199());
+ Do200(new T200());
+ Do201(new T201());
+ Do202(new T202());
+ Do203(new T203());
+ Do204(new T204());
+ Do205(new T205());
+ Do206(new T206());
+ Do207(new T207());
+ Do208(new T208());
+ Do209(new T209());
+ Do210(new T210());
+ Do211(new T211());
+ Do212(new T212());
+ Do213(new T213());
+ Do214(new T214());
+ Do215(new T215());
+ Do216(new T216());
+ Do217(new T217());
+ Do218(new T218());
+ Do219(new T219());
+ Do220(new T220());
+ Do221(new T221());
+ Do222(new T222());
+ Do223(new T223());
+ Do224(new T224());
+ Do225(new T225());
+ Do226(new T226());
+ Do227(new T227());
+ Do228(new T228());
+ Do229(new T229());
+ Do230(new T230());
+ Do231(new T231());
+ Do232(new T232());
+ Do233(new T233());
+ Do234(new T234());
+ Do235(new T235());
+ Do236(new T236());
+ Do237(new T237());
+ Do238(new T238());
+ Do239(new T239());
+ Do240(new T240());
+ Do241(new T241());
+ Do242(new T242());
+ Do243(new T243());
+ Do244(new T244());
+ Do245(new T245());
+ Do246(new T246());
+ Do247(new T247());
+ Do248(new T248());
+ Do249(new T249());
+ Do250(new T250());
+ Do251(new T251());
+ Do252(new T252());
+ Do253(new T253());
+ Do254(new T254());
+ Do255(new T255());
+ Do256(new T256());
+ Do257(new T257());
+ Do258(new T258());
+ Do259(new T259());
+ Do260(new T260());
+ Do261(new T261());
+ Do262(new T262());
+ Do263(new T263());
+ Do264(new T264());
+ Do265(new T265());
+ Do266(new T266());
+ Do267(new T267());
+ Do268(new T268());
+ Do269(new T269());
+ Do270(new T270());
+ Do271(new T271());
+ Do272(new T272());
+ Do273(new T273());
+ Do274(new T274());
+ Do275(new T275());
+ Do276(new T276());
+ Do277(new T277());
+ Do278(new T278());
+ Do279(new T279());
+ Do280(new T280());
+ Do281(new T281());
+ Do282(new T282());
+ Do283(new T283());
+ Do284(new T284());
+ Do285(new T285());
+ Do286(new T286());
+ Do287(new T287());
+ Do288(new T288());
+ Do289(new T289());
+ Do290(new T290());
+ Do291(new T291());
+ Do292(new T292());
+ Do293(new T293());
+ Do294(new T294());
+ Do295(new T295());
+ Do296(new T296());
+ Do297(new T297());
+ Do298(new T298());
+ Do299(new T299());
+ Do300(new T300());
+ Do301(new T301());
+ Do302(new T302());
+ Do303(new T303());
+ Do304(new T304());
+ Do305(new T305());
+ Do306(new T306());
+ Do307(new T307());
+ Do308(new T308());
+ Do309(new T309());
+ Do310(new T310());
+ Do311(new T311());
+ Do312(new T312());
+ Do313(new T313());
+ Do314(new T314());
+ Do315(new T315());
+ Do316(new T316());
+ Do317(new T317());
+ Do318(new T318());
+ Do319(new T319());
+ Do320(new T320());
+ Do321(new T321());
+ Do322(new T322());
+ Do323(new T323());
+ Do324(new T324());
+ Do325(new T325());
+ Do326(new T326());
+ Do327(new T327());
+ Do328(new T328());
+ Do329(new T329());
+ Do330(new T330());
+ Do331(new T331());
+ Do332(new T332());
+ Do333(new T333());
+ Do334(new T334());
+ Do335(new T335());
+ Do336(new T336());
+ Do337(new T337());
+ Do338(new T338());
+ Do339(new T339());
+ Do340(new T340());
+ Do341(new T341());
+ Do342(new T342());
+ Do343(new T343());
+ Do344(new T344());
+ Do345(new T345());
+ Do346(new T346());
+ Do347(new T347());
+ Do348(new T348());
+ Do349(new T349());
+ Do350(new T350());
+ Do351(new T351());
+ Do352(new T352());
+ Do353(new T353());
+ Do354(new T354());
+ Do355(new T355());
+ Do356(new T356());
+ Do357(new T357());
+ Do358(new T358());
+ Do359(new T359());
+ Do360(new T360());
+ Do361(new T361());
+ Do362(new T362());
+ Do363(new T363());
+ Do364(new T364());
+ Do365(new T365());
+ Do366(new T366());
+ Do367(new T367());
+ Do368(new T368());
+ Do369(new T369());
+ Do370(new T370());
+ Do371(new T371());
+ Do372(new T372());
+ Do373(new T373());
+ Do374(new T374());
+ Do375(new T375());
+ Do376(new T376());
+ Do377(new T377());
+ Do378(new T378());
+ Do379(new T379());
+ Do380(new T380());
+ Do381(new T381());
+ Do382(new T382());
+ Do383(new T383());
+ Do384(new T384());
+ Do385(new T385());
+ Do386(new T386());
+ Do387(new T387());
+ Do388(new T388());
+ Do389(new T389());
+ Do390(new T390());
+ Do391(new T391());
+ Do392(new T392());
+ Do393(new T393());
+ Do394(new T394());
+ Do395(new T395());
+ Do396(new T396());
+ Do397(new T397());
+ Do398(new T398());
+ Do399(new T399());
+ Do400(new T400());
+ Do401(new T401());
+ Do402(new T402());
+ Do403(new T403());
+ Do404(new T404());
+ Do405(new T405());
+ Do406(new T406());
+ Do407(new T407());
+ Do408(new T408());
+ Do409(new T409());
+ Do410(new T410());
+ Do411(new T411());
+ Do412(new T412());
+ Do413(new T413());
+ Do414(new T414());
+ Do415(new T415());
+ Do416(new T416());
+ Do417(new T417());
+ Do418(new T418());
+ Do419(new T419());
+ Do420(new T420());
+ Do421(new T421());
+ Do422(new T422());
+ Do423(new T423());
+ Do424(new T424());
+ Do425(new T425());
+ Do426(new T426());
+ Do427(new T427());
+ Do428(new T428());
+ Do429(new T429());
+ Do430(new T430());
+ Do431(new T431());
+ Do432(new T432());
+ Do433(new T433());
+ Do434(new T434());
+ Do435(new T435());
+ Do436(new T436());
+ Do437(new T437());
+ Do438(new T438());
+ Do439(new T439());
+ Do440(new T440());
+ Do441(new T441());
+ Do442(new T442());
+ Do443(new T443());
+ Do444(new T444());
+ Do445(new T445());
+ Do446(new T446());
+ Do447(new T447());
+ Do448(new T448());
+ Do449(new T449());
+ Do450(new T450());
+ Do451(new T451());
+ Do452(new T452());
+ Do453(new T453());
+ Do454(new T454());
+ Do455(new T455());
+ Do456(new T456());
+ Do457(new T457());
+ Do458(new T458());
+ Do459(new T459());
+ Do460(new T460());
+ Do461(new T461());
+ Do462(new T462());
+ Do463(new T463());
+ Do464(new T464());
+ Do465(new T465());
+ Do466(new T466());
+ Do467(new T467());
+ Do468(new T468());
+ Do469(new T469());
+ Do470(new T470());
+ Do471(new T471());
+ Do472(new T472());
+ Do473(new T473());
+ Do474(new T474());
+ Do475(new T475());
+ Do476(new T476());
+ Do477(new T477());
+ Do478(new T478());
+ Do479(new T479());
+ Do480(new T480());
+ Do481(new T481());
+ Do482(new T482());
+ Do483(new T483());
+ Do484(new T484());
+ Do485(new T485());
+ Do486(new T486());
+ Do487(new T487());
+ Do488(new T488());
+ Do489(new T489());
+ Do490(new T490());
+ Do491(new T491());
+ Do492(new T492());
+ Do493(new T493());
+ Do494(new T494());
+ Do495(new T495());
+ Do496(new T496());
+ Do497(new T497());
+ Do498(new T498());
+ Do499(new T499());
+ Do500(new T500());
+ Do501(new T501());
+ Do502(new T502());
+ Do503(new T503());
+ Do504(new T504());
+ Do505(new T505());
+ Do506(new T506());
+ Do507(new T507());
+ Do508(new T508());
+ Do509(new T509());
+ Do510(new T510());
+ Do511(new T511());
+ Do512(new T512());
+ Do513(new T513());
+ Do514(new T514());
+ Do515(new T515());
+ Do516(new T516());
+ Do517(new T517());
+ Do518(new T518());
+ Do519(new T519());
+ Do520(new T520());
+ Do521(new T521());
+ Do522(new T522());
+ Do523(new T523());
+ Do524(new T524());
+ Do525(new T525());
+ Do526(new T526());
+ Do527(new T527());
+ Do528(new T528());
+ Do529(new T529());
+ Do530(new T530());
+ Do531(new T531());
+ Do532(new T532());
+ Do533(new T533());
+ Do534(new T534());
+ Do535(new T535());
+ Do536(new T536());
+ Do537(new T537());
+ Do538(new T538());
+ Do539(new T539());
+ Do540(new T540());
+ Do541(new T541());
+ Do542(new T542());
+ Do543(new T543());
+ Do544(new T544());
+ Do545(new T545());
+ Do546(new T546());
+ Do547(new T547());
+ Do548(new T548());
+ Do549(new T549());
+ Do550(new T550());
+ Do551(new T551());
+ Do552(new T552());
+ Do553(new T553());
+ Do554(new T554());
+ Do555(new T555());
+ Do556(new T556());
+ Do557(new T557());
+ Do558(new T558());
+ Do559(new T559());
+ Do560(new T560());
+ Do561(new T561());
+ Do562(new T562());
+ Do563(new T563());
+ Do564(new T564());
+ Do565(new T565());
+ Do566(new T566());
+ Do567(new T567());
+ Do568(new T568());
+ Do569(new T569());
+ Do570(new T570());
+ Do571(new T571());
+ Do572(new T572());
+ Do573(new T573());
+ Do574(new T574());
+ Do575(new T575());
+ Do576(new T576());
+ Do577(new T577());
+ Do578(new T578());
+ Do579(new T579());
+ Do580(new T580());
+ Do581(new T581());
+ Do582(new T582());
+ Do583(new T583());
+ Do584(new T584());
+ Do585(new T585());
+ Do586(new T586());
+ Do587(new T587());
+ Do588(new T588());
+ Do589(new T589());
+ Do590(new T590());
+ Do591(new T591());
+ Do592(new T592());
+ Do593(new T593());
+ Do594(new T594());
+ Do595(new T595());
+ Do596(new T596());
+ Do597(new T597());
+ Do598(new T598());
+ Do599(new T599());
+ Do600(new T600());
+ Do601(new T601());
+ Do602(new T602());
+ Do603(new T603());
+ Do604(new T604());
+ Do605(new T605());
+ Do606(new T606());
+ Do607(new T607());
+ Do608(new T608());
+ Do609(new T609());
+ Do610(new T610());
+ Do611(new T611());
+ Do612(new T612());
+ Do613(new T613());
+ Do614(new T614());
+ Do615(new T615());
+ Do616(new T616());
+ Do617(new T617());
+ Do618(new T618());
+ Do619(new T619());
+ Do620(new T620());
+ Do621(new T621());
+ Do622(new T622());
+ Do623(new T623());
+ Do624(new T624());
+ Do625(new T625());
+ Do626(new T626());
+ Do627(new T627());
+ Do628(new T628());
+ Do629(new T629());
+ Do630(new T630());
+ Do631(new T631());
+ Do632(new T632());
+ Do633(new T633());
+ Do634(new T634());
+ Do635(new T635());
+ Do636(new T636());
+ Do637(new T637());
+ Do638(new T638());
+ Do639(new T639());
+ Do640(new T640());
+ Do641(new T641());
+ Do642(new T642());
+ Do643(new T643());
+ Do644(new T644());
+ Do645(new T645());
+ Do646(new T646());
+ Do647(new T647());
+ Do648(new T648());
+ Do649(new T649());
+ Do650(new T650());
+ Do651(new T651());
+ Do652(new T652());
+ Do653(new T653());
+ Do654(new T654());
+ Do655(new T655());
+ Do656(new T656());
+ Do657(new T657());
+ Do658(new T658());
+ Do659(new T659());
+ Do660(new T660());
+ Do661(new T661());
+ Do662(new T662());
+ Do663(new T663());
+ Do664(new T664());
+ Do665(new T665());
+ Do666(new T666());
+ Do667(new T667());
+ Do668(new T668());
+ Do669(new T669());
+ Do670(new T670());
+ Do671(new T671());
+ Do672(new T672());
+ Do673(new T673());
+ Do674(new T674());
+ Do675(new T675());
+ Do676(new T676());
+ Do677(new T677());
+ Do678(new T678());
+ Do679(new T679());
+ Do680(new T680());
+ Do681(new T681());
+ Do682(new T682());
+ Do683(new T683());
+ Do684(new T684());
+ Do685(new T685());
+ Do686(new T686());
+ Do687(new T687());
+ Do688(new T688());
+ Do689(new T689());
+ Do690(new T690());
+ Do691(new T691());
+ Do692(new T692());
+ Do693(new T693());
+ Do694(new T694());
+ Do695(new T695());
+ Do696(new T696());
+ Do697(new T697());
+ Do698(new T698());
+ Do699(new T699());
+ Do700(new T700());
+ Do701(new T701());
+ Do702(new T702());
+ Do703(new T703());
+ Do704(new T704());
+ Do705(new T705());
+ Do706(new T706());
+ Do707(new T707());
+ Do708(new T708());
+ Do709(new T709());
+ Do710(new T710());
+ Do711(new T711());
+ Do712(new T712());
+ Do713(new T713());
+ Do714(new T714());
+ Do715(new T715());
+ Do716(new T716());
+ Do717(new T717());
+ Do718(new T718());
+ Do719(new T719());
+ Do720(new T720());
+ Do721(new T721());
+ Do722(new T722());
+ Do723(new T723());
+ Do724(new T724());
+ Do725(new T725());
+ Do726(new T726());
+ Do727(new T727());
+ Do728(new T728());
+ Do729(new T729());
+ Do730(new T730());
+ Do731(new T731());
+ Do732(new T732());
+ Do733(new T733());
+ Do734(new T734());
+ Do735(new T735());
+ Do736(new T736());
+ Do737(new T737());
+ Do738(new T738());
+ Do739(new T739());
+ Do740(new T740());
+ Do741(new T741());
+ Do742(new T742());
+ Do743(new T743());
+ Do744(new T744());
+ Do745(new T745());
+ Do746(new T746());
+ Do747(new T747());
+ Do748(new T748());
+ Do749(new T749());
+ Do750(new T750());
+ Do751(new T751());
+ Do752(new T752());
+ Do753(new T753());
+ Do754(new T754());
+ Do755(new T755());
+ Do756(new T756());
+ Do757(new T757());
+ Do758(new T758());
+ Do759(new T759());
+ Do760(new T760());
+ Do761(new T761());
+ Do762(new T762());
+ Do763(new T763());
+ Do764(new T764());
+ Do765(new T765());
+ Do766(new T766());
+ Do767(new T767());
+ Do768(new T768());
+ Do769(new T769());
+ Do770(new T770());
+ Do771(new T771());
+ Do772(new T772());
+ Do773(new T773());
+ Do774(new T774());
+ Do775(new T775());
+ Do776(new T776());
+ Do777(new T777());
+ Do778(new T778());
+ Do779(new T779());
+ Do780(new T780());
+ Do781(new T781());
+ Do782(new T782());
+ Do783(new T783());
+ Do784(new T784());
+ Do785(new T785());
+ Do786(new T786());
+ Do787(new T787());
+ Do788(new T788());
+ Do789(new T789());
+ Do790(new T790());
+ Do791(new T791());
+ Do792(new T792());
+ Do793(new T793());
+ Do794(new T794());
+ Do795(new T795());
+ Do796(new T796());
+ Do797(new T797());
+ Do798(new T798());
+ Do799(new T799());
+ Do800(new T800());
+ Do801(new T801());
+ Do802(new T802());
+ Do803(new T803());
+ Do804(new T804());
+ Do805(new T805());
+ Do806(new T806());
+ Do807(new T807());
+ Do808(new T808());
+ Do809(new T809());
+ Do810(new T810());
+ Do811(new T811());
+ Do812(new T812());
+ Do813(new T813());
+ Do814(new T814());
+ Do815(new T815());
+ Do816(new T816());
+ Do817(new T817());
+ Do818(new T818());
+ Do819(new T819());
+ Do820(new T820());
+ Do821(new T821());
+ Do822(new T822());
+ Do823(new T823());
+ Do824(new T824());
+ Do825(new T825());
+ Do826(new T826());
+ Do827(new T827());
+ Do828(new T828());
+ Do829(new T829());
+ Do830(new T830());
+ Do831(new T831());
+ Do832(new T832());
+ Do833(new T833());
+ Do834(new T834());
+ Do835(new T835());
+ Do836(new T836());
+ Do837(new T837());
+ Do838(new T838());
+ Do839(new T839());
+ Do840(new T840());
+ Do841(new T841());
+ Do842(new T842());
+ Do843(new T843());
+ Do844(new T844());
+ Do845(new T845());
+ Do846(new T846());
+ Do847(new T847());
+ Do848(new T848());
+ Do849(new T849());
+ Do850(new T850());
+ Do851(new T851());
+ Do852(new T852());
+ Do853(new T853());
+ Do854(new T854());
+ Do855(new T855());
+ Do856(new T856());
+ Do857(new T857());
+ Do858(new T858());
+ Do859(new T859());
+ Do860(new T860());
+ Do861(new T861());
+ Do862(new T862());
+ Do863(new T863());
+ Do864(new T864());
+ Do865(new T865());
+ Do866(new T866());
+ Do867(new T867());
+ Do868(new T868());
+ Do869(new T869());
+ Do870(new T870());
+ Do871(new T871());
+ Do872(new T872());
+ Do873(new T873());
+ Do874(new T874());
+ Do875(new T875());
+ Do876(new T876());
+ Do877(new T877());
+ Do878(new T878());
+ Do879(new T879());
+ Do880(new T880());
+ Do881(new T881());
+ Do882(new T882());
+ Do883(new T883());
+ Do884(new T884());
+ Do885(new T885());
+ Do886(new T886());
+ Do887(new T887());
+ Do888(new T888());
+ Do889(new T889());
+ Do890(new T890());
+ Do891(new T891());
+ Do892(new T892());
+ Do893(new T893());
+ Do894(new T894());
+ Do895(new T895());
+ Do896(new T896());
+ Do897(new T897());
+ Do898(new T898());
+ Do899(new T899());
+ Do900(new T900());
+ Do901(new T901());
+ Do902(new T902());
+ Do903(new T903());
+ Do904(new T904());
+ Do905(new T905());
+ Do906(new T906());
+ Do907(new T907());
+ Do908(new T908());
+ Do909(new T909());
+ Do910(new T910());
+ Do911(new T911());
+ Do912(new T912());
+ Do913(new T913());
+ Do914(new T914());
+ Do915(new T915());
+ Do916(new T916());
+ Do917(new T917());
+ Do918(new T918());
+ Do919(new T919());
+ Do920(new T920());
+ Do921(new T921());
+ Do922(new T922());
+ Do923(new T923());
+ Do924(new T924());
+ Do925(new T925());
+ Do926(new T926());
+ Do927(new T927());
+ Do928(new T928());
+ Do929(new T929());
+ Do930(new T930());
+ Do931(new T931());
+ Do932(new T932());
+ Do933(new T933());
+ Do934(new T934());
+ Do935(new T935());
+ Do936(new T936());
+ Do937(new T937());
+ Do938(new T938());
+ Do939(new T939());
+ Do940(new T940());
+ Do941(new T941());
+ Do942(new T942());
+ Do943(new T943());
+ Do944(new T944());
+ Do945(new T945());
+ Do946(new T946());
+ Do947(new T947());
+ Do948(new T948());
+ Do949(new T949());
+ Do950(new T950());
+ Do951(new T951());
+ Do952(new T952());
+ Do953(new T953());
+ Do954(new T954());
+ Do955(new T955());
+ Do956(new T956());
+ Do957(new T957());
+ Do958(new T958());
+ Do959(new T959());
+ Do960(new T960());
+ Do961(new T961());
+ Do962(new T962());
+ Do963(new T963());
+ Do964(new T964());
+ Do965(new T965());
+ Do966(new T966());
+ Do967(new T967());
+ Do968(new T968());
+ Do969(new T969());
+ Do970(new T970());
+ Do971(new T971());
+ Do972(new T972());
+ Do973(new T973());
+ Do974(new T974());
+ Do975(new T975());
+ Do976(new T976());
+ Do977(new T977());
+ Do978(new T978());
+ Do979(new T979());
+ Do980(new T980());
+ Do981(new T981());
+ Do982(new T982());
+ Do983(new T983());
+ Do984(new T984());
+ Do985(new T985());
+ Do986(new T986());
+ Do987(new T987());
+ Do988(new T988());
+ Do989(new T989());
+ Do990(new T990());
+ Do991(new T991());
+ Do992(new T992());
+ Do993(new T993());
+ Do994(new T994());
+ Do995(new T995());
+ Do996(new T996());
+ Do997(new T997());
+ Do998(new T998());
+ Do999(new T999());
+
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (TypeLoadException e)
+ {
+ Console.WriteLine("FAIL: Caught unexpected TypeLoadException" + e.Message);
+ return 101;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("FAIL: Caught unexpected exception:" + e.Message);
+ return 101;
+ }
+
+
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do0(T0 t) {
+ Nullable<T0> n = new Nullable<T0>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do1(T1 t) {
+ Nullable<T1> n = new Nullable<T1>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do2(T2 t) {
+ Nullable<T2> n = new Nullable<T2>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do3(T3 t) {
+ Nullable<T3> n = new Nullable<T3>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do4(T4 t) {
+ Nullable<T4> n = new Nullable<T4>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do5(T5 t) {
+ Nullable<T5> n = new Nullable<T5>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do6(T6 t) {
+ Nullable<T6> n = new Nullable<T6>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do7(T7 t) {
+ Nullable<T7> n = new Nullable<T7>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do8(T8 t) {
+ Nullable<T8> n = new Nullable<T8>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do9(T9 t) {
+ Nullable<T9> n = new Nullable<T9>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do10(T10 t) {
+ Nullable<T10> n = new Nullable<T10>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do11(T11 t) {
+ Nullable<T11> n = new Nullable<T11>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do12(T12 t) {
+ Nullable<T12> n = new Nullable<T12>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do13(T13 t) {
+ Nullable<T13> n = new Nullable<T13>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do14(T14 t) {
+ Nullable<T14> n = new Nullable<T14>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do15(T15 t) {
+ Nullable<T15> n = new Nullable<T15>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do16(T16 t) {
+ Nullable<T16> n = new Nullable<T16>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do17(T17 t) {
+ Nullable<T17> n = new Nullable<T17>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do18(T18 t) {
+ Nullable<T18> n = new Nullable<T18>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do19(T19 t) {
+ Nullable<T19> n = new Nullable<T19>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do20(T20 t) {
+ Nullable<T20> n = new Nullable<T20>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do21(T21 t) {
+ Nullable<T21> n = new Nullable<T21>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do22(T22 t) {
+ Nullable<T22> n = new Nullable<T22>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do23(T23 t) {
+ Nullable<T23> n = new Nullable<T23>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do24(T24 t) {
+ Nullable<T24> n = new Nullable<T24>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do25(T25 t) {
+ Nullable<T25> n = new Nullable<T25>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do26(T26 t) {
+ Nullable<T26> n = new Nullable<T26>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do27(T27 t) {
+ Nullable<T27> n = new Nullable<T27>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do28(T28 t) {
+ Nullable<T28> n = new Nullable<T28>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do29(T29 t) {
+ Nullable<T29> n = new Nullable<T29>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do30(T30 t) {
+ Nullable<T30> n = new Nullable<T30>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do31(T31 t) {
+ Nullable<T31> n = new Nullable<T31>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do32(T32 t) {
+ Nullable<T32> n = new Nullable<T32>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do33(T33 t) {
+ Nullable<T33> n = new Nullable<T33>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do34(T34 t) {
+ Nullable<T34> n = new Nullable<T34>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do35(T35 t) {
+ Nullable<T35> n = new Nullable<T35>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do36(T36 t) {
+ Nullable<T36> n = new Nullable<T36>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do37(T37 t) {
+ Nullable<T37> n = new Nullable<T37>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do38(T38 t) {
+ Nullable<T38> n = new Nullable<T38>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do39(T39 t) {
+ Nullable<T39> n = new Nullable<T39>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do40(T40 t) {
+ Nullable<T40> n = new Nullable<T40>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do41(T41 t) {
+ Nullable<T41> n = new Nullable<T41>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do42(T42 t) {
+ Nullable<T42> n = new Nullable<T42>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do43(T43 t) {
+ Nullable<T43> n = new Nullable<T43>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do44(T44 t) {
+ Nullable<T44> n = new Nullable<T44>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do45(T45 t) {
+ Nullable<T45> n = new Nullable<T45>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do46(T46 t) {
+ Nullable<T46> n = new Nullable<T46>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do47(T47 t) {
+ Nullable<T47> n = new Nullable<T47>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do48(T48 t) {
+ Nullable<T48> n = new Nullable<T48>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do49(T49 t) {
+ Nullable<T49> n = new Nullable<T49>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do50(T50 t) {
+ Nullable<T50> n = new Nullable<T50>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do51(T51 t) {
+ Nullable<T51> n = new Nullable<T51>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do52(T52 t) {
+ Nullable<T52> n = new Nullable<T52>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do53(T53 t) {
+ Nullable<T53> n = new Nullable<T53>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do54(T54 t) {
+ Nullable<T54> n = new Nullable<T54>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do55(T55 t) {
+ Nullable<T55> n = new Nullable<T55>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do56(T56 t) {
+ Nullable<T56> n = new Nullable<T56>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do57(T57 t) {
+ Nullable<T57> n = new Nullable<T57>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do58(T58 t) {
+ Nullable<T58> n = new Nullable<T58>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do59(T59 t) {
+ Nullable<T59> n = new Nullable<T59>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do60(T60 t) {
+ Nullable<T60> n = new Nullable<T60>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do61(T61 t) {
+ Nullable<T61> n = new Nullable<T61>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do62(T62 t) {
+ Nullable<T62> n = new Nullable<T62>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do63(T63 t) {
+ Nullable<T63> n = new Nullable<T63>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do64(T64 t) {
+ Nullable<T64> n = new Nullable<T64>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do65(T65 t) {
+ Nullable<T65> n = new Nullable<T65>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do66(T66 t) {
+ Nullable<T66> n = new Nullable<T66>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do67(T67 t) {
+ Nullable<T67> n = new Nullable<T67>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do68(T68 t) {
+ Nullable<T68> n = new Nullable<T68>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do69(T69 t) {
+ Nullable<T69> n = new Nullable<T69>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do70(T70 t) {
+ Nullable<T70> n = new Nullable<T70>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do71(T71 t) {
+ Nullable<T71> n = new Nullable<T71>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do72(T72 t) {
+ Nullable<T72> n = new Nullable<T72>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do73(T73 t) {
+ Nullable<T73> n = new Nullable<T73>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do74(T74 t) {
+ Nullable<T74> n = new Nullable<T74>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do75(T75 t) {
+ Nullable<T75> n = new Nullable<T75>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do76(T76 t) {
+ Nullable<T76> n = new Nullable<T76>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do77(T77 t) {
+ Nullable<T77> n = new Nullable<T77>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do78(T78 t) {
+ Nullable<T78> n = new Nullable<T78>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do79(T79 t) {
+ Nullable<T79> n = new Nullable<T79>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do80(T80 t) {
+ Nullable<T80> n = new Nullable<T80>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do81(T81 t) {
+ Nullable<T81> n = new Nullable<T81>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do82(T82 t) {
+ Nullable<T82> n = new Nullable<T82>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do83(T83 t) {
+ Nullable<T83> n = new Nullable<T83>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do84(T84 t) {
+ Nullable<T84> n = new Nullable<T84>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do85(T85 t) {
+ Nullable<T85> n = new Nullable<T85>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do86(T86 t) {
+ Nullable<T86> n = new Nullable<T86>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do87(T87 t) {
+ Nullable<T87> n = new Nullable<T87>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do88(T88 t) {
+ Nullable<T88> n = new Nullable<T88>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do89(T89 t) {
+ Nullable<T89> n = new Nullable<T89>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do90(T90 t) {
+ Nullable<T90> n = new Nullable<T90>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do91(T91 t) {
+ Nullable<T91> n = new Nullable<T91>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do92(T92 t) {
+ Nullable<T92> n = new Nullable<T92>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do93(T93 t) {
+ Nullable<T93> n = new Nullable<T93>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do94(T94 t) {
+ Nullable<T94> n = new Nullable<T94>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do95(T95 t) {
+ Nullable<T95> n = new Nullable<T95>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do96(T96 t) {
+ Nullable<T96> n = new Nullable<T96>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do97(T97 t) {
+ Nullable<T97> n = new Nullable<T97>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do98(T98 t) {
+ Nullable<T98> n = new Nullable<T98>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do99(T99 t) {
+ Nullable<T99> n = new Nullable<T99>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do100(T100 t) {
+ Nullable<T100> n = new Nullable<T100>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do101(T101 t) {
+ Nullable<T101> n = new Nullable<T101>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do102(T102 t) {
+ Nullable<T102> n = new Nullable<T102>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do103(T103 t) {
+ Nullable<T103> n = new Nullable<T103>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do104(T104 t) {
+ Nullable<T104> n = new Nullable<T104>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do105(T105 t) {
+ Nullable<T105> n = new Nullable<T105>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do106(T106 t) {
+ Nullable<T106> n = new Nullable<T106>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do107(T107 t) {
+ Nullable<T107> n = new Nullable<T107>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do108(T108 t) {
+ Nullable<T108> n = new Nullable<T108>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do109(T109 t) {
+ Nullable<T109> n = new Nullable<T109>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do110(T110 t) {
+ Nullable<T110> n = new Nullable<T110>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do111(T111 t) {
+ Nullable<T111> n = new Nullable<T111>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do112(T112 t) {
+ Nullable<T112> n = new Nullable<T112>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do113(T113 t) {
+ Nullable<T113> n = new Nullable<T113>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do114(T114 t) {
+ Nullable<T114> n = new Nullable<T114>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do115(T115 t) {
+ Nullable<T115> n = new Nullable<T115>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do116(T116 t) {
+ Nullable<T116> n = new Nullable<T116>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do117(T117 t) {
+ Nullable<T117> n = new Nullable<T117>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do118(T118 t) {
+ Nullable<T118> n = new Nullable<T118>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do119(T119 t) {
+ Nullable<T119> n = new Nullable<T119>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do120(T120 t) {
+ Nullable<T120> n = new Nullable<T120>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do121(T121 t) {
+ Nullable<T121> n = new Nullable<T121>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do122(T122 t) {
+ Nullable<T122> n = new Nullable<T122>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do123(T123 t) {
+ Nullable<T123> n = new Nullable<T123>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do124(T124 t) {
+ Nullable<T124> n = new Nullable<T124>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do125(T125 t) {
+ Nullable<T125> n = new Nullable<T125>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do126(T126 t) {
+ Nullable<T126> n = new Nullable<T126>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do127(T127 t) {
+ Nullable<T127> n = new Nullable<T127>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do128(T128 t) {
+ Nullable<T128> n = new Nullable<T128>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do129(T129 t) {
+ Nullable<T129> n = new Nullable<T129>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do130(T130 t) {
+ Nullable<T130> n = new Nullable<T130>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do131(T131 t) {
+ Nullable<T131> n = new Nullable<T131>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do132(T132 t) {
+ Nullable<T132> n = new Nullable<T132>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do133(T133 t) {
+ Nullable<T133> n = new Nullable<T133>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do134(T134 t) {
+ Nullable<T134> n = new Nullable<T134>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do135(T135 t) {
+ Nullable<T135> n = new Nullable<T135>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do136(T136 t) {
+ Nullable<T136> n = new Nullable<T136>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do137(T137 t) {
+ Nullable<T137> n = new Nullable<T137>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do138(T138 t) {
+ Nullable<T138> n = new Nullable<T138>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do139(T139 t) {
+ Nullable<T139> n = new Nullable<T139>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do140(T140 t) {
+ Nullable<T140> n = new Nullable<T140>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do141(T141 t) {
+ Nullable<T141> n = new Nullable<T141>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do142(T142 t) {
+ Nullable<T142> n = new Nullable<T142>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do143(T143 t) {
+ Nullable<T143> n = new Nullable<T143>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do144(T144 t) {
+ Nullable<T144> n = new Nullable<T144>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do145(T145 t) {
+ Nullable<T145> n = new Nullable<T145>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do146(T146 t) {
+ Nullable<T146> n = new Nullable<T146>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do147(T147 t) {
+ Nullable<T147> n = new Nullable<T147>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do148(T148 t) {
+ Nullable<T148> n = new Nullable<T148>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do149(T149 t) {
+ Nullable<T149> n = new Nullable<T149>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do150(T150 t) {
+ Nullable<T150> n = new Nullable<T150>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do151(T151 t) {
+ Nullable<T151> n = new Nullable<T151>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do152(T152 t) {
+ Nullable<T152> n = new Nullable<T152>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do153(T153 t) {
+ Nullable<T153> n = new Nullable<T153>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do154(T154 t) {
+ Nullable<T154> n = new Nullable<T154>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do155(T155 t) {
+ Nullable<T155> n = new Nullable<T155>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do156(T156 t) {
+ Nullable<T156> n = new Nullable<T156>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do157(T157 t) {
+ Nullable<T157> n = new Nullable<T157>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do158(T158 t) {
+ Nullable<T158> n = new Nullable<T158>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do159(T159 t) {
+ Nullable<T159> n = new Nullable<T159>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do160(T160 t) {
+ Nullable<T160> n = new Nullable<T160>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do161(T161 t) {
+ Nullable<T161> n = new Nullable<T161>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do162(T162 t) {
+ Nullable<T162> n = new Nullable<T162>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do163(T163 t) {
+ Nullable<T163> n = new Nullable<T163>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do164(T164 t) {
+ Nullable<T164> n = new Nullable<T164>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do165(T165 t) {
+ Nullable<T165> n = new Nullable<T165>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do166(T166 t) {
+ Nullable<T166> n = new Nullable<T166>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do167(T167 t) {
+ Nullable<T167> n = new Nullable<T167>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do168(T168 t) {
+ Nullable<T168> n = new Nullable<T168>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do169(T169 t) {
+ Nullable<T169> n = new Nullable<T169>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do170(T170 t) {
+ Nullable<T170> n = new Nullable<T170>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do171(T171 t) {
+ Nullable<T171> n = new Nullable<T171>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do172(T172 t) {
+ Nullable<T172> n = new Nullable<T172>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do173(T173 t) {
+ Nullable<T173> n = new Nullable<T173>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do174(T174 t) {
+ Nullable<T174> n = new Nullable<T174>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do175(T175 t) {
+ Nullable<T175> n = new Nullable<T175>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do176(T176 t) {
+ Nullable<T176> n = new Nullable<T176>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do177(T177 t) {
+ Nullable<T177> n = new Nullable<T177>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do178(T178 t) {
+ Nullable<T178> n = new Nullable<T178>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do179(T179 t) {
+ Nullable<T179> n = new Nullable<T179>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do180(T180 t) {
+ Nullable<T180> n = new Nullable<T180>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do181(T181 t) {
+ Nullable<T181> n = new Nullable<T181>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do182(T182 t) {
+ Nullable<T182> n = new Nullable<T182>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do183(T183 t) {
+ Nullable<T183> n = new Nullable<T183>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do184(T184 t) {
+ Nullable<T184> n = new Nullable<T184>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do185(T185 t) {
+ Nullable<T185> n = new Nullable<T185>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do186(T186 t) {
+ Nullable<T186> n = new Nullable<T186>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do187(T187 t) {
+ Nullable<T187> n = new Nullable<T187>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do188(T188 t) {
+ Nullable<T188> n = new Nullable<T188>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do189(T189 t) {
+ Nullable<T189> n = new Nullable<T189>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do190(T190 t) {
+ Nullable<T190> n = new Nullable<T190>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do191(T191 t) {
+ Nullable<T191> n = new Nullable<T191>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do192(T192 t) {
+ Nullable<T192> n = new Nullable<T192>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do193(T193 t) {
+ Nullable<T193> n = new Nullable<T193>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do194(T194 t) {
+ Nullable<T194> n = new Nullable<T194>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do195(T195 t) {
+ Nullable<T195> n = new Nullable<T195>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do196(T196 t) {
+ Nullable<T196> n = new Nullable<T196>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do197(T197 t) {
+ Nullable<T197> n = new Nullable<T197>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do198(T198 t) {
+ Nullable<T198> n = new Nullable<T198>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do199(T199 t) {
+ Nullable<T199> n = new Nullable<T199>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do200(T200 t) {
+ Nullable<T200> n = new Nullable<T200>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do201(T201 t) {
+ Nullable<T201> n = new Nullable<T201>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do202(T202 t) {
+ Nullable<T202> n = new Nullable<T202>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do203(T203 t) {
+ Nullable<T203> n = new Nullable<T203>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do204(T204 t) {
+ Nullable<T204> n = new Nullable<T204>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do205(T205 t) {
+ Nullable<T205> n = new Nullable<T205>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do206(T206 t) {
+ Nullable<T206> n = new Nullable<T206>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do207(T207 t) {
+ Nullable<T207> n = new Nullable<T207>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do208(T208 t) {
+ Nullable<T208> n = new Nullable<T208>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do209(T209 t) {
+ Nullable<T209> n = new Nullable<T209>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do210(T210 t) {
+ Nullable<T210> n = new Nullable<T210>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do211(T211 t) {
+ Nullable<T211> n = new Nullable<T211>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do212(T212 t) {
+ Nullable<T212> n = new Nullable<T212>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do213(T213 t) {
+ Nullable<T213> n = new Nullable<T213>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do214(T214 t) {
+ Nullable<T214> n = new Nullable<T214>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do215(T215 t) {
+ Nullable<T215> n = new Nullable<T215>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do216(T216 t) {
+ Nullable<T216> n = new Nullable<T216>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do217(T217 t) {
+ Nullable<T217> n = new Nullable<T217>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do218(T218 t) {
+ Nullable<T218> n = new Nullable<T218>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do219(T219 t) {
+ Nullable<T219> n = new Nullable<T219>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do220(T220 t) {
+ Nullable<T220> n = new Nullable<T220>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do221(T221 t) {
+ Nullable<T221> n = new Nullable<T221>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do222(T222 t) {
+ Nullable<T222> n = new Nullable<T222>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do223(T223 t) {
+ Nullable<T223> n = new Nullable<T223>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do224(T224 t) {
+ Nullable<T224> n = new Nullable<T224>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do225(T225 t) {
+ Nullable<T225> n = new Nullable<T225>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do226(T226 t) {
+ Nullable<T226> n = new Nullable<T226>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do227(T227 t) {
+ Nullable<T227> n = new Nullable<T227>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do228(T228 t) {
+ Nullable<T228> n = new Nullable<T228>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do229(T229 t) {
+ Nullable<T229> n = new Nullable<T229>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do230(T230 t) {
+ Nullable<T230> n = new Nullable<T230>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do231(T231 t) {
+ Nullable<T231> n = new Nullable<T231>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do232(T232 t) {
+ Nullable<T232> n = new Nullable<T232>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do233(T233 t) {
+ Nullable<T233> n = new Nullable<T233>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do234(T234 t) {
+ Nullable<T234> n = new Nullable<T234>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do235(T235 t) {
+ Nullable<T235> n = new Nullable<T235>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do236(T236 t) {
+ Nullable<T236> n = new Nullable<T236>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do237(T237 t) {
+ Nullable<T237> n = new Nullable<T237>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do238(T238 t) {
+ Nullable<T238> n = new Nullable<T238>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do239(T239 t) {
+ Nullable<T239> n = new Nullable<T239>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do240(T240 t) {
+ Nullable<T240> n = new Nullable<T240>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do241(T241 t) {
+ Nullable<T241> n = new Nullable<T241>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do242(T242 t) {
+ Nullable<T242> n = new Nullable<T242>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do243(T243 t) {
+ Nullable<T243> n = new Nullable<T243>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do244(T244 t) {
+ Nullable<T244> n = new Nullable<T244>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do245(T245 t) {
+ Nullable<T245> n = new Nullable<T245>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do246(T246 t) {
+ Nullable<T246> n = new Nullable<T246>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do247(T247 t) {
+ Nullable<T247> n = new Nullable<T247>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do248(T248 t) {
+ Nullable<T248> n = new Nullable<T248>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do249(T249 t) {
+ Nullable<T249> n = new Nullable<T249>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do250(T250 t) {
+ Nullable<T250> n = new Nullable<T250>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do251(T251 t) {
+ Nullable<T251> n = new Nullable<T251>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do252(T252 t) {
+ Nullable<T252> n = new Nullable<T252>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do253(T253 t) {
+ Nullable<T253> n = new Nullable<T253>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do254(T254 t) {
+ Nullable<T254> n = new Nullable<T254>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do255(T255 t) {
+ Nullable<T255> n = new Nullable<T255>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do256(T256 t) {
+ Nullable<T256> n = new Nullable<T256>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do257(T257 t) {
+ Nullable<T257> n = new Nullable<T257>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do258(T258 t) {
+ Nullable<T258> n = new Nullable<T258>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do259(T259 t) {
+ Nullable<T259> n = new Nullable<T259>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do260(T260 t) {
+ Nullable<T260> n = new Nullable<T260>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do261(T261 t) {
+ Nullable<T261> n = new Nullable<T261>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do262(T262 t) {
+ Nullable<T262> n = new Nullable<T262>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do263(T263 t) {
+ Nullable<T263> n = new Nullable<T263>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do264(T264 t) {
+ Nullable<T264> n = new Nullable<T264>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do265(T265 t) {
+ Nullable<T265> n = new Nullable<T265>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do266(T266 t) {
+ Nullable<T266> n = new Nullable<T266>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do267(T267 t) {
+ Nullable<T267> n = new Nullable<T267>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do268(T268 t) {
+ Nullable<T268> n = new Nullable<T268>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do269(T269 t) {
+ Nullable<T269> n = new Nullable<T269>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do270(T270 t) {
+ Nullable<T270> n = new Nullable<T270>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do271(T271 t) {
+ Nullable<T271> n = new Nullable<T271>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do272(T272 t) {
+ Nullable<T272> n = new Nullable<T272>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do273(T273 t) {
+ Nullable<T273> n = new Nullable<T273>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do274(T274 t) {
+ Nullable<T274> n = new Nullable<T274>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do275(T275 t) {
+ Nullable<T275> n = new Nullable<T275>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do276(T276 t) {
+ Nullable<T276> n = new Nullable<T276>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do277(T277 t) {
+ Nullable<T277> n = new Nullable<T277>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do278(T278 t) {
+ Nullable<T278> n = new Nullable<T278>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do279(T279 t) {
+ Nullable<T279> n = new Nullable<T279>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do280(T280 t) {
+ Nullable<T280> n = new Nullable<T280>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do281(T281 t) {
+ Nullable<T281> n = new Nullable<T281>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do282(T282 t) {
+ Nullable<T282> n = new Nullable<T282>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do283(T283 t) {
+ Nullable<T283> n = new Nullable<T283>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do284(T284 t) {
+ Nullable<T284> n = new Nullable<T284>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do285(T285 t) {
+ Nullable<T285> n = new Nullable<T285>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do286(T286 t) {
+ Nullable<T286> n = new Nullable<T286>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do287(T287 t) {
+ Nullable<T287> n = new Nullable<T287>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do288(T288 t) {
+ Nullable<T288> n = new Nullable<T288>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do289(T289 t) {
+ Nullable<T289> n = new Nullable<T289>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do290(T290 t) {
+ Nullable<T290> n = new Nullable<T290>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do291(T291 t) {
+ Nullable<T291> n = new Nullable<T291>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do292(T292 t) {
+ Nullable<T292> n = new Nullable<T292>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do293(T293 t) {
+ Nullable<T293> n = new Nullable<T293>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do294(T294 t) {
+ Nullable<T294> n = new Nullable<T294>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do295(T295 t) {
+ Nullable<T295> n = new Nullable<T295>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do296(T296 t) {
+ Nullable<T296> n = new Nullable<T296>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do297(T297 t) {
+ Nullable<T297> n = new Nullable<T297>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do298(T298 t) {
+ Nullable<T298> n = new Nullable<T298>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do299(T299 t) {
+ Nullable<T299> n = new Nullable<T299>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do300(T300 t) {
+ Nullable<T300> n = new Nullable<T300>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do301(T301 t) {
+ Nullable<T301> n = new Nullable<T301>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do302(T302 t) {
+ Nullable<T302> n = new Nullable<T302>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do303(T303 t) {
+ Nullable<T303> n = new Nullable<T303>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do304(T304 t) {
+ Nullable<T304> n = new Nullable<T304>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do305(T305 t) {
+ Nullable<T305> n = new Nullable<T305>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do306(T306 t) {
+ Nullable<T306> n = new Nullable<T306>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do307(T307 t) {
+ Nullable<T307> n = new Nullable<T307>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do308(T308 t) {
+ Nullable<T308> n = new Nullable<T308>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do309(T309 t) {
+ Nullable<T309> n = new Nullable<T309>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do310(T310 t) {
+ Nullable<T310> n = new Nullable<T310>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do311(T311 t) {
+ Nullable<T311> n = new Nullable<T311>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do312(T312 t) {
+ Nullable<T312> n = new Nullable<T312>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do313(T313 t) {
+ Nullable<T313> n = new Nullable<T313>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do314(T314 t) {
+ Nullable<T314> n = new Nullable<T314>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do315(T315 t) {
+ Nullable<T315> n = new Nullable<T315>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do316(T316 t) {
+ Nullable<T316> n = new Nullable<T316>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do317(T317 t) {
+ Nullable<T317> n = new Nullable<T317>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do318(T318 t) {
+ Nullable<T318> n = new Nullable<T318>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do319(T319 t) {
+ Nullable<T319> n = new Nullable<T319>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do320(T320 t) {
+ Nullable<T320> n = new Nullable<T320>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do321(T321 t) {
+ Nullable<T321> n = new Nullable<T321>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do322(T322 t) {
+ Nullable<T322> n = new Nullable<T322>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do323(T323 t) {
+ Nullable<T323> n = new Nullable<T323>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do324(T324 t) {
+ Nullable<T324> n = new Nullable<T324>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do325(T325 t) {
+ Nullable<T325> n = new Nullable<T325>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do326(T326 t) {
+ Nullable<T326> n = new Nullable<T326>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do327(T327 t) {
+ Nullable<T327> n = new Nullable<T327>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do328(T328 t) {
+ Nullable<T328> n = new Nullable<T328>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do329(T329 t) {
+ Nullable<T329> n = new Nullable<T329>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do330(T330 t) {
+ Nullable<T330> n = new Nullable<T330>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do331(T331 t) {
+ Nullable<T331> n = new Nullable<T331>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do332(T332 t) {
+ Nullable<T332> n = new Nullable<T332>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do333(T333 t) {
+ Nullable<T333> n = new Nullable<T333>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do334(T334 t) {
+ Nullable<T334> n = new Nullable<T334>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do335(T335 t) {
+ Nullable<T335> n = new Nullable<T335>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do336(T336 t) {
+ Nullable<T336> n = new Nullable<T336>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do337(T337 t) {
+ Nullable<T337> n = new Nullable<T337>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do338(T338 t) {
+ Nullable<T338> n = new Nullable<T338>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do339(T339 t) {
+ Nullable<T339> n = new Nullable<T339>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do340(T340 t) {
+ Nullable<T340> n = new Nullable<T340>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do341(T341 t) {
+ Nullable<T341> n = new Nullable<T341>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do342(T342 t) {
+ Nullable<T342> n = new Nullable<T342>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do343(T343 t) {
+ Nullable<T343> n = new Nullable<T343>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do344(T344 t) {
+ Nullable<T344> n = new Nullable<T344>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do345(T345 t) {
+ Nullable<T345> n = new Nullable<T345>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do346(T346 t) {
+ Nullable<T346> n = new Nullable<T346>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do347(T347 t) {
+ Nullable<T347> n = new Nullable<T347>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do348(T348 t) {
+ Nullable<T348> n = new Nullable<T348>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do349(T349 t) {
+ Nullable<T349> n = new Nullable<T349>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do350(T350 t) {
+ Nullable<T350> n = new Nullable<T350>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do351(T351 t) {
+ Nullable<T351> n = new Nullable<T351>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do352(T352 t) {
+ Nullable<T352> n = new Nullable<T352>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do353(T353 t) {
+ Nullable<T353> n = new Nullable<T353>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do354(T354 t) {
+ Nullable<T354> n = new Nullable<T354>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do355(T355 t) {
+ Nullable<T355> n = new Nullable<T355>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do356(T356 t) {
+ Nullable<T356> n = new Nullable<T356>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do357(T357 t) {
+ Nullable<T357> n = new Nullable<T357>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do358(T358 t) {
+ Nullable<T358> n = new Nullable<T358>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do359(T359 t) {
+ Nullable<T359> n = new Nullable<T359>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do360(T360 t) {
+ Nullable<T360> n = new Nullable<T360>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do361(T361 t) {
+ Nullable<T361> n = new Nullable<T361>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do362(T362 t) {
+ Nullable<T362> n = new Nullable<T362>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do363(T363 t) {
+ Nullable<T363> n = new Nullable<T363>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do364(T364 t) {
+ Nullable<T364> n = new Nullable<T364>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do365(T365 t) {
+ Nullable<T365> n = new Nullable<T365>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do366(T366 t) {
+ Nullable<T366> n = new Nullable<T366>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do367(T367 t) {
+ Nullable<T367> n = new Nullable<T367>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do368(T368 t) {
+ Nullable<T368> n = new Nullable<T368>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do369(T369 t) {
+ Nullable<T369> n = new Nullable<T369>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do370(T370 t) {
+ Nullable<T370> n = new Nullable<T370>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do371(T371 t) {
+ Nullable<T371> n = new Nullable<T371>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do372(T372 t) {
+ Nullable<T372> n = new Nullable<T372>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do373(T373 t) {
+ Nullable<T373> n = new Nullable<T373>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do374(T374 t) {
+ Nullable<T374> n = new Nullable<T374>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do375(T375 t) {
+ Nullable<T375> n = new Nullable<T375>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do376(T376 t) {
+ Nullable<T376> n = new Nullable<T376>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do377(T377 t) {
+ Nullable<T377> n = new Nullable<T377>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do378(T378 t) {
+ Nullable<T378> n = new Nullable<T378>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do379(T379 t) {
+ Nullable<T379> n = new Nullable<T379>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do380(T380 t) {
+ Nullable<T380> n = new Nullable<T380>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do381(T381 t) {
+ Nullable<T381> n = new Nullable<T381>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do382(T382 t) {
+ Nullable<T382> n = new Nullable<T382>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do383(T383 t) {
+ Nullable<T383> n = new Nullable<T383>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do384(T384 t) {
+ Nullable<T384> n = new Nullable<T384>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do385(T385 t) {
+ Nullable<T385> n = new Nullable<T385>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do386(T386 t) {
+ Nullable<T386> n = new Nullable<T386>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do387(T387 t) {
+ Nullable<T387> n = new Nullable<T387>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do388(T388 t) {
+ Nullable<T388> n = new Nullable<T388>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do389(T389 t) {
+ Nullable<T389> n = new Nullable<T389>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do390(T390 t) {
+ Nullable<T390> n = new Nullable<T390>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do391(T391 t) {
+ Nullable<T391> n = new Nullable<T391>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do392(T392 t) {
+ Nullable<T392> n = new Nullable<T392>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do393(T393 t) {
+ Nullable<T393> n = new Nullable<T393>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do394(T394 t) {
+ Nullable<T394> n = new Nullable<T394>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do395(T395 t) {
+ Nullable<T395> n = new Nullable<T395>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do396(T396 t) {
+ Nullable<T396> n = new Nullable<T396>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do397(T397 t) {
+ Nullable<T397> n = new Nullable<T397>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do398(T398 t) {
+ Nullable<T398> n = new Nullable<T398>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do399(T399 t) {
+ Nullable<T399> n = new Nullable<T399>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do400(T400 t) {
+ Nullable<T400> n = new Nullable<T400>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do401(T401 t) {
+ Nullable<T401> n = new Nullable<T401>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do402(T402 t) {
+ Nullable<T402> n = new Nullable<T402>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do403(T403 t) {
+ Nullable<T403> n = new Nullable<T403>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do404(T404 t) {
+ Nullable<T404> n = new Nullable<T404>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do405(T405 t) {
+ Nullable<T405> n = new Nullable<T405>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do406(T406 t) {
+ Nullable<T406> n = new Nullable<T406>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do407(T407 t) {
+ Nullable<T407> n = new Nullable<T407>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do408(T408 t) {
+ Nullable<T408> n = new Nullable<T408>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do409(T409 t) {
+ Nullable<T409> n = new Nullable<T409>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do410(T410 t) {
+ Nullable<T410> n = new Nullable<T410>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do411(T411 t) {
+ Nullable<T411> n = new Nullable<T411>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do412(T412 t) {
+ Nullable<T412> n = new Nullable<T412>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do413(T413 t) {
+ Nullable<T413> n = new Nullable<T413>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do414(T414 t) {
+ Nullable<T414> n = new Nullable<T414>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do415(T415 t) {
+ Nullable<T415> n = new Nullable<T415>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do416(T416 t) {
+ Nullable<T416> n = new Nullable<T416>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do417(T417 t) {
+ Nullable<T417> n = new Nullable<T417>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do418(T418 t) {
+ Nullable<T418> n = new Nullable<T418>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do419(T419 t) {
+ Nullable<T419> n = new Nullable<T419>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do420(T420 t) {
+ Nullable<T420> n = new Nullable<T420>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do421(T421 t) {
+ Nullable<T421> n = new Nullable<T421>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do422(T422 t) {
+ Nullable<T422> n = new Nullable<T422>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do423(T423 t) {
+ Nullable<T423> n = new Nullable<T423>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do424(T424 t) {
+ Nullable<T424> n = new Nullable<T424>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do425(T425 t) {
+ Nullable<T425> n = new Nullable<T425>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do426(T426 t) {
+ Nullable<T426> n = new Nullable<T426>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do427(T427 t) {
+ Nullable<T427> n = new Nullable<T427>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do428(T428 t) {
+ Nullable<T428> n = new Nullable<T428>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do429(T429 t) {
+ Nullable<T429> n = new Nullable<T429>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do430(T430 t) {
+ Nullable<T430> n = new Nullable<T430>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do431(T431 t) {
+ Nullable<T431> n = new Nullable<T431>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do432(T432 t) {
+ Nullable<T432> n = new Nullable<T432>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do433(T433 t) {
+ Nullable<T433> n = new Nullable<T433>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do434(T434 t) {
+ Nullable<T434> n = new Nullable<T434>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do435(T435 t) {
+ Nullable<T435> n = new Nullable<T435>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do436(T436 t) {
+ Nullable<T436> n = new Nullable<T436>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do437(T437 t) {
+ Nullable<T437> n = new Nullable<T437>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do438(T438 t) {
+ Nullable<T438> n = new Nullable<T438>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do439(T439 t) {
+ Nullable<T439> n = new Nullable<T439>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do440(T440 t) {
+ Nullable<T440> n = new Nullable<T440>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do441(T441 t) {
+ Nullable<T441> n = new Nullable<T441>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do442(T442 t) {
+ Nullable<T442> n = new Nullable<T442>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do443(T443 t) {
+ Nullable<T443> n = new Nullable<T443>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do444(T444 t) {
+ Nullable<T444> n = new Nullable<T444>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do445(T445 t) {
+ Nullable<T445> n = new Nullable<T445>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do446(T446 t) {
+ Nullable<T446> n = new Nullable<T446>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do447(T447 t) {
+ Nullable<T447> n = new Nullable<T447>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do448(T448 t) {
+ Nullable<T448> n = new Nullable<T448>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do449(T449 t) {
+ Nullable<T449> n = new Nullable<T449>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do450(T450 t) {
+ Nullable<T450> n = new Nullable<T450>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do451(T451 t) {
+ Nullable<T451> n = new Nullable<T451>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do452(T452 t) {
+ Nullable<T452> n = new Nullable<T452>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do453(T453 t) {
+ Nullable<T453> n = new Nullable<T453>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do454(T454 t) {
+ Nullable<T454> n = new Nullable<T454>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do455(T455 t) {
+ Nullable<T455> n = new Nullable<T455>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do456(T456 t) {
+ Nullable<T456> n = new Nullable<T456>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do457(T457 t) {
+ Nullable<T457> n = new Nullable<T457>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do458(T458 t) {
+ Nullable<T458> n = new Nullable<T458>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do459(T459 t) {
+ Nullable<T459> n = new Nullable<T459>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do460(T460 t) {
+ Nullable<T460> n = new Nullable<T460>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do461(T461 t) {
+ Nullable<T461> n = new Nullable<T461>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do462(T462 t) {
+ Nullable<T462> n = new Nullable<T462>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do463(T463 t) {
+ Nullable<T463> n = new Nullable<T463>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do464(T464 t) {
+ Nullable<T464> n = new Nullable<T464>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do465(T465 t) {
+ Nullable<T465> n = new Nullable<T465>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do466(T466 t) {
+ Nullable<T466> n = new Nullable<T466>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do467(T467 t) {
+ Nullable<T467> n = new Nullable<T467>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do468(T468 t) {
+ Nullable<T468> n = new Nullable<T468>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do469(T469 t) {
+ Nullable<T469> n = new Nullable<T469>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do470(T470 t) {
+ Nullable<T470> n = new Nullable<T470>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do471(T471 t) {
+ Nullable<T471> n = new Nullable<T471>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do472(T472 t) {
+ Nullable<T472> n = new Nullable<T472>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do473(T473 t) {
+ Nullable<T473> n = new Nullable<T473>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do474(T474 t) {
+ Nullable<T474> n = new Nullable<T474>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do475(T475 t) {
+ Nullable<T475> n = new Nullable<T475>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do476(T476 t) {
+ Nullable<T476> n = new Nullable<T476>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do477(T477 t) {
+ Nullable<T477> n = new Nullable<T477>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do478(T478 t) {
+ Nullable<T478> n = new Nullable<T478>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do479(T479 t) {
+ Nullable<T479> n = new Nullable<T479>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do480(T480 t) {
+ Nullable<T480> n = new Nullable<T480>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do481(T481 t) {
+ Nullable<T481> n = new Nullable<T481>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do482(T482 t) {
+ Nullable<T482> n = new Nullable<T482>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do483(T483 t) {
+ Nullable<T483> n = new Nullable<T483>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do484(T484 t) {
+ Nullable<T484> n = new Nullable<T484>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do485(T485 t) {
+ Nullable<T485> n = new Nullable<T485>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do486(T486 t) {
+ Nullable<T486> n = new Nullable<T486>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do487(T487 t) {
+ Nullable<T487> n = new Nullable<T487>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do488(T488 t) {
+ Nullable<T488> n = new Nullable<T488>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do489(T489 t) {
+ Nullable<T489> n = new Nullable<T489>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do490(T490 t) {
+ Nullable<T490> n = new Nullable<T490>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do491(T491 t) {
+ Nullable<T491> n = new Nullable<T491>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do492(T492 t) {
+ Nullable<T492> n = new Nullable<T492>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do493(T493 t) {
+ Nullable<T493> n = new Nullable<T493>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do494(T494 t) {
+ Nullable<T494> n = new Nullable<T494>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do495(T495 t) {
+ Nullable<T495> n = new Nullable<T495>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do496(T496 t) {
+ Nullable<T496> n = new Nullable<T496>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do497(T497 t) {
+ Nullable<T497> n = new Nullable<T497>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do498(T498 t) {
+ Nullable<T498> n = new Nullable<T498>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do499(T499 t) {
+ Nullable<T499> n = new Nullable<T499>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do500(T500 t) {
+ Nullable<T500> n = new Nullable<T500>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do501(T501 t) {
+ Nullable<T501> n = new Nullable<T501>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do502(T502 t) {
+ Nullable<T502> n = new Nullable<T502>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do503(T503 t) {
+ Nullable<T503> n = new Nullable<T503>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do504(T504 t) {
+ Nullable<T504> n = new Nullable<T504>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do505(T505 t) {
+ Nullable<T505> n = new Nullable<T505>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do506(T506 t) {
+ Nullable<T506> n = new Nullable<T506>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do507(T507 t) {
+ Nullable<T507> n = new Nullable<T507>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do508(T508 t) {
+ Nullable<T508> n = new Nullable<T508>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do509(T509 t) {
+ Nullable<T509> n = new Nullable<T509>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do510(T510 t) {
+ Nullable<T510> n = new Nullable<T510>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do511(T511 t) {
+ Nullable<T511> n = new Nullable<T511>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do512(T512 t) {
+ Nullable<T512> n = new Nullable<T512>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do513(T513 t) {
+ Nullable<T513> n = new Nullable<T513>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do514(T514 t) {
+ Nullable<T514> n = new Nullable<T514>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do515(T515 t) {
+ Nullable<T515> n = new Nullable<T515>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do516(T516 t) {
+ Nullable<T516> n = new Nullable<T516>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do517(T517 t) {
+ Nullable<T517> n = new Nullable<T517>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do518(T518 t) {
+ Nullable<T518> n = new Nullable<T518>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do519(T519 t) {
+ Nullable<T519> n = new Nullable<T519>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do520(T520 t) {
+ Nullable<T520> n = new Nullable<T520>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do521(T521 t) {
+ Nullable<T521> n = new Nullable<T521>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do522(T522 t) {
+ Nullable<T522> n = new Nullable<T522>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do523(T523 t) {
+ Nullable<T523> n = new Nullable<T523>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do524(T524 t) {
+ Nullable<T524> n = new Nullable<T524>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do525(T525 t) {
+ Nullable<T525> n = new Nullable<T525>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do526(T526 t) {
+ Nullable<T526> n = new Nullable<T526>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do527(T527 t) {
+ Nullable<T527> n = new Nullable<T527>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do528(T528 t) {
+ Nullable<T528> n = new Nullable<T528>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do529(T529 t) {
+ Nullable<T529> n = new Nullable<T529>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do530(T530 t) {
+ Nullable<T530> n = new Nullable<T530>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do531(T531 t) {
+ Nullable<T531> n = new Nullable<T531>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do532(T532 t) {
+ Nullable<T532> n = new Nullable<T532>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do533(T533 t) {
+ Nullable<T533> n = new Nullable<T533>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do534(T534 t) {
+ Nullable<T534> n = new Nullable<T534>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do535(T535 t) {
+ Nullable<T535> n = new Nullable<T535>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do536(T536 t) {
+ Nullable<T536> n = new Nullable<T536>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do537(T537 t) {
+ Nullable<T537> n = new Nullable<T537>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do538(T538 t) {
+ Nullable<T538> n = new Nullable<T538>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do539(T539 t) {
+ Nullable<T539> n = new Nullable<T539>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do540(T540 t) {
+ Nullable<T540> n = new Nullable<T540>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do541(T541 t) {
+ Nullable<T541> n = new Nullable<T541>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do542(T542 t) {
+ Nullable<T542> n = new Nullable<T542>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do543(T543 t) {
+ Nullable<T543> n = new Nullable<T543>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do544(T544 t) {
+ Nullable<T544> n = new Nullable<T544>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do545(T545 t) {
+ Nullable<T545> n = new Nullable<T545>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do546(T546 t) {
+ Nullable<T546> n = new Nullable<T546>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do547(T547 t) {
+ Nullable<T547> n = new Nullable<T547>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do548(T548 t) {
+ Nullable<T548> n = new Nullable<T548>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do549(T549 t) {
+ Nullable<T549> n = new Nullable<T549>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do550(T550 t) {
+ Nullable<T550> n = new Nullable<T550>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do551(T551 t) {
+ Nullable<T551> n = new Nullable<T551>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do552(T552 t) {
+ Nullable<T552> n = new Nullable<T552>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do553(T553 t) {
+ Nullable<T553> n = new Nullable<T553>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do554(T554 t) {
+ Nullable<T554> n = new Nullable<T554>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do555(T555 t) {
+ Nullable<T555> n = new Nullable<T555>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do556(T556 t) {
+ Nullable<T556> n = new Nullable<T556>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do557(T557 t) {
+ Nullable<T557> n = new Nullable<T557>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do558(T558 t) {
+ Nullable<T558> n = new Nullable<T558>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do559(T559 t) {
+ Nullable<T559> n = new Nullable<T559>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do560(T560 t) {
+ Nullable<T560> n = new Nullable<T560>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do561(T561 t) {
+ Nullable<T561> n = new Nullable<T561>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do562(T562 t) {
+ Nullable<T562> n = new Nullable<T562>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do563(T563 t) {
+ Nullable<T563> n = new Nullable<T563>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do564(T564 t) {
+ Nullable<T564> n = new Nullable<T564>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do565(T565 t) {
+ Nullable<T565> n = new Nullable<T565>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do566(T566 t) {
+ Nullable<T566> n = new Nullable<T566>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do567(T567 t) {
+ Nullable<T567> n = new Nullable<T567>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do568(T568 t) {
+ Nullable<T568> n = new Nullable<T568>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do569(T569 t) {
+ Nullable<T569> n = new Nullable<T569>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do570(T570 t) {
+ Nullable<T570> n = new Nullable<T570>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do571(T571 t) {
+ Nullable<T571> n = new Nullable<T571>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do572(T572 t) {
+ Nullable<T572> n = new Nullable<T572>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do573(T573 t) {
+ Nullable<T573> n = new Nullable<T573>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do574(T574 t) {
+ Nullable<T574> n = new Nullable<T574>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do575(T575 t) {
+ Nullable<T575> n = new Nullable<T575>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do576(T576 t) {
+ Nullable<T576> n = new Nullable<T576>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do577(T577 t) {
+ Nullable<T577> n = new Nullable<T577>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do578(T578 t) {
+ Nullable<T578> n = new Nullable<T578>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do579(T579 t) {
+ Nullable<T579> n = new Nullable<T579>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do580(T580 t) {
+ Nullable<T580> n = new Nullable<T580>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do581(T581 t) {
+ Nullable<T581> n = new Nullable<T581>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do582(T582 t) {
+ Nullable<T582> n = new Nullable<T582>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do583(T583 t) {
+ Nullable<T583> n = new Nullable<T583>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do584(T584 t) {
+ Nullable<T584> n = new Nullable<T584>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do585(T585 t) {
+ Nullable<T585> n = new Nullable<T585>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do586(T586 t) {
+ Nullable<T586> n = new Nullable<T586>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do587(T587 t) {
+ Nullable<T587> n = new Nullable<T587>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do588(T588 t) {
+ Nullable<T588> n = new Nullable<T588>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do589(T589 t) {
+ Nullable<T589> n = new Nullable<T589>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do590(T590 t) {
+ Nullable<T590> n = new Nullable<T590>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do591(T591 t) {
+ Nullable<T591> n = new Nullable<T591>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do592(T592 t) {
+ Nullable<T592> n = new Nullable<T592>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do593(T593 t) {
+ Nullable<T593> n = new Nullable<T593>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do594(T594 t) {
+ Nullable<T594> n = new Nullable<T594>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do595(T595 t) {
+ Nullable<T595> n = new Nullable<T595>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do596(T596 t) {
+ Nullable<T596> n = new Nullable<T596>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do597(T597 t) {
+ Nullable<T597> n = new Nullable<T597>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do598(T598 t) {
+ Nullable<T598> n = new Nullable<T598>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do599(T599 t) {
+ Nullable<T599> n = new Nullable<T599>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do600(T600 t) {
+ Nullable<T600> n = new Nullable<T600>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do601(T601 t) {
+ Nullable<T601> n = new Nullable<T601>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do602(T602 t) {
+ Nullable<T602> n = new Nullable<T602>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do603(T603 t) {
+ Nullable<T603> n = new Nullable<T603>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do604(T604 t) {
+ Nullable<T604> n = new Nullable<T604>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do605(T605 t) {
+ Nullable<T605> n = new Nullable<T605>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do606(T606 t) {
+ Nullable<T606> n = new Nullable<T606>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do607(T607 t) {
+ Nullable<T607> n = new Nullable<T607>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do608(T608 t) {
+ Nullable<T608> n = new Nullable<T608>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do609(T609 t) {
+ Nullable<T609> n = new Nullable<T609>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do610(T610 t) {
+ Nullable<T610> n = new Nullable<T610>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do611(T611 t) {
+ Nullable<T611> n = new Nullable<T611>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do612(T612 t) {
+ Nullable<T612> n = new Nullable<T612>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do613(T613 t) {
+ Nullable<T613> n = new Nullable<T613>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do614(T614 t) {
+ Nullable<T614> n = new Nullable<T614>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do615(T615 t) {
+ Nullable<T615> n = new Nullable<T615>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do616(T616 t) {
+ Nullable<T616> n = new Nullable<T616>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do617(T617 t) {
+ Nullable<T617> n = new Nullable<T617>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do618(T618 t) {
+ Nullable<T618> n = new Nullable<T618>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do619(T619 t) {
+ Nullable<T619> n = new Nullable<T619>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do620(T620 t) {
+ Nullable<T620> n = new Nullable<T620>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do621(T621 t) {
+ Nullable<T621> n = new Nullable<T621>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do622(T622 t) {
+ Nullable<T622> n = new Nullable<T622>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do623(T623 t) {
+ Nullable<T623> n = new Nullable<T623>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do624(T624 t) {
+ Nullable<T624> n = new Nullable<T624>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do625(T625 t) {
+ Nullable<T625> n = new Nullable<T625>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do626(T626 t) {
+ Nullable<T626> n = new Nullable<T626>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do627(T627 t) {
+ Nullable<T627> n = new Nullable<T627>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do628(T628 t) {
+ Nullable<T628> n = new Nullable<T628>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do629(T629 t) {
+ Nullable<T629> n = new Nullable<T629>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do630(T630 t) {
+ Nullable<T630> n = new Nullable<T630>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do631(T631 t) {
+ Nullable<T631> n = new Nullable<T631>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do632(T632 t) {
+ Nullable<T632> n = new Nullable<T632>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do633(T633 t) {
+ Nullable<T633> n = new Nullable<T633>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do634(T634 t) {
+ Nullable<T634> n = new Nullable<T634>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do635(T635 t) {
+ Nullable<T635> n = new Nullable<T635>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do636(T636 t) {
+ Nullable<T636> n = new Nullable<T636>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do637(T637 t) {
+ Nullable<T637> n = new Nullable<T637>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do638(T638 t) {
+ Nullable<T638> n = new Nullable<T638>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do639(T639 t) {
+ Nullable<T639> n = new Nullable<T639>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do640(T640 t) {
+ Nullable<T640> n = new Nullable<T640>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do641(T641 t) {
+ Nullable<T641> n = new Nullable<T641>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do642(T642 t) {
+ Nullable<T642> n = new Nullable<T642>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do643(T643 t) {
+ Nullable<T643> n = new Nullable<T643>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do644(T644 t) {
+ Nullable<T644> n = new Nullable<T644>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do645(T645 t) {
+ Nullable<T645> n = new Nullable<T645>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do646(T646 t) {
+ Nullable<T646> n = new Nullable<T646>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do647(T647 t) {
+ Nullable<T647> n = new Nullable<T647>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do648(T648 t) {
+ Nullable<T648> n = new Nullable<T648>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do649(T649 t) {
+ Nullable<T649> n = new Nullable<T649>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do650(T650 t) {
+ Nullable<T650> n = new Nullable<T650>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do651(T651 t) {
+ Nullable<T651> n = new Nullable<T651>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do652(T652 t) {
+ Nullable<T652> n = new Nullable<T652>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do653(T653 t) {
+ Nullable<T653> n = new Nullable<T653>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do654(T654 t) {
+ Nullable<T654> n = new Nullable<T654>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do655(T655 t) {
+ Nullable<T655> n = new Nullable<T655>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do656(T656 t) {
+ Nullable<T656> n = new Nullable<T656>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do657(T657 t) {
+ Nullable<T657> n = new Nullable<T657>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do658(T658 t) {
+ Nullable<T658> n = new Nullable<T658>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do659(T659 t) {
+ Nullable<T659> n = new Nullable<T659>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do660(T660 t) {
+ Nullable<T660> n = new Nullable<T660>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do661(T661 t) {
+ Nullable<T661> n = new Nullable<T661>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do662(T662 t) {
+ Nullable<T662> n = new Nullable<T662>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do663(T663 t) {
+ Nullable<T663> n = new Nullable<T663>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do664(T664 t) {
+ Nullable<T664> n = new Nullable<T664>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do665(T665 t) {
+ Nullable<T665> n = new Nullable<T665>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do666(T666 t) {
+ Nullable<T666> n = new Nullable<T666>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do667(T667 t) {
+ Nullable<T667> n = new Nullable<T667>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do668(T668 t) {
+ Nullable<T668> n = new Nullable<T668>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do669(T669 t) {
+ Nullable<T669> n = new Nullable<T669>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do670(T670 t) {
+ Nullable<T670> n = new Nullable<T670>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do671(T671 t) {
+ Nullable<T671> n = new Nullable<T671>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do672(T672 t) {
+ Nullable<T672> n = new Nullable<T672>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do673(T673 t) {
+ Nullable<T673> n = new Nullable<T673>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do674(T674 t) {
+ Nullable<T674> n = new Nullable<T674>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do675(T675 t) {
+ Nullable<T675> n = new Nullable<T675>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do676(T676 t) {
+ Nullable<T676> n = new Nullable<T676>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do677(T677 t) {
+ Nullable<T677> n = new Nullable<T677>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do678(T678 t) {
+ Nullable<T678> n = new Nullable<T678>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do679(T679 t) {
+ Nullable<T679> n = new Nullable<T679>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do680(T680 t) {
+ Nullable<T680> n = new Nullable<T680>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do681(T681 t) {
+ Nullable<T681> n = new Nullable<T681>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do682(T682 t) {
+ Nullable<T682> n = new Nullable<T682>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do683(T683 t) {
+ Nullable<T683> n = new Nullable<T683>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do684(T684 t) {
+ Nullable<T684> n = new Nullable<T684>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do685(T685 t) {
+ Nullable<T685> n = new Nullable<T685>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do686(T686 t) {
+ Nullable<T686> n = new Nullable<T686>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do687(T687 t) {
+ Nullable<T687> n = new Nullable<T687>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do688(T688 t) {
+ Nullable<T688> n = new Nullable<T688>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do689(T689 t) {
+ Nullable<T689> n = new Nullable<T689>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do690(T690 t) {
+ Nullable<T690> n = new Nullable<T690>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do691(T691 t) {
+ Nullable<T691> n = new Nullable<T691>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do692(T692 t) {
+ Nullable<T692> n = new Nullable<T692>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do693(T693 t) {
+ Nullable<T693> n = new Nullable<T693>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do694(T694 t) {
+ Nullable<T694> n = new Nullable<T694>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do695(T695 t) {
+ Nullable<T695> n = new Nullable<T695>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do696(T696 t) {
+ Nullable<T696> n = new Nullable<T696>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do697(T697 t) {
+ Nullable<T697> n = new Nullable<T697>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do698(T698 t) {
+ Nullable<T698> n = new Nullable<T698>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do699(T699 t) {
+ Nullable<T699> n = new Nullable<T699>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do700(T700 t) {
+ Nullable<T700> n = new Nullable<T700>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do701(T701 t) {
+ Nullable<T701> n = new Nullable<T701>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do702(T702 t) {
+ Nullable<T702> n = new Nullable<T702>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do703(T703 t) {
+ Nullable<T703> n = new Nullable<T703>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do704(T704 t) {
+ Nullable<T704> n = new Nullable<T704>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do705(T705 t) {
+ Nullable<T705> n = new Nullable<T705>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do706(T706 t) {
+ Nullable<T706> n = new Nullable<T706>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do707(T707 t) {
+ Nullable<T707> n = new Nullable<T707>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do708(T708 t) {
+ Nullable<T708> n = new Nullable<T708>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do709(T709 t) {
+ Nullable<T709> n = new Nullable<T709>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do710(T710 t) {
+ Nullable<T710> n = new Nullable<T710>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do711(T711 t) {
+ Nullable<T711> n = new Nullable<T711>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do712(T712 t) {
+ Nullable<T712> n = new Nullable<T712>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do713(T713 t) {
+ Nullable<T713> n = new Nullable<T713>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do714(T714 t) {
+ Nullable<T714> n = new Nullable<T714>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do715(T715 t) {
+ Nullable<T715> n = new Nullable<T715>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do716(T716 t) {
+ Nullable<T716> n = new Nullable<T716>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do717(T717 t) {
+ Nullable<T717> n = new Nullable<T717>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do718(T718 t) {
+ Nullable<T718> n = new Nullable<T718>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do719(T719 t) {
+ Nullable<T719> n = new Nullable<T719>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do720(T720 t) {
+ Nullable<T720> n = new Nullable<T720>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do721(T721 t) {
+ Nullable<T721> n = new Nullable<T721>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do722(T722 t) {
+ Nullable<T722> n = new Nullable<T722>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do723(T723 t) {
+ Nullable<T723> n = new Nullable<T723>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do724(T724 t) {
+ Nullable<T724> n = new Nullable<T724>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do725(T725 t) {
+ Nullable<T725> n = new Nullable<T725>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do726(T726 t) {
+ Nullable<T726> n = new Nullable<T726>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do727(T727 t) {
+ Nullable<T727> n = new Nullable<T727>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do728(T728 t) {
+ Nullable<T728> n = new Nullable<T728>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do729(T729 t) {
+ Nullable<T729> n = new Nullable<T729>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do730(T730 t) {
+ Nullable<T730> n = new Nullable<T730>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do731(T731 t) {
+ Nullable<T731> n = new Nullable<T731>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do732(T732 t) {
+ Nullable<T732> n = new Nullable<T732>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do733(T733 t) {
+ Nullable<T733> n = new Nullable<T733>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do734(T734 t) {
+ Nullable<T734> n = new Nullable<T734>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do735(T735 t) {
+ Nullable<T735> n = new Nullable<T735>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do736(T736 t) {
+ Nullable<T736> n = new Nullable<T736>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do737(T737 t) {
+ Nullable<T737> n = new Nullable<T737>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do738(T738 t) {
+ Nullable<T738> n = new Nullable<T738>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do739(T739 t) {
+ Nullable<T739> n = new Nullable<T739>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do740(T740 t) {
+ Nullable<T740> n = new Nullable<T740>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do741(T741 t) {
+ Nullable<T741> n = new Nullable<T741>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do742(T742 t) {
+ Nullable<T742> n = new Nullable<T742>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do743(T743 t) {
+ Nullable<T743> n = new Nullable<T743>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do744(T744 t) {
+ Nullable<T744> n = new Nullable<T744>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do745(T745 t) {
+ Nullable<T745> n = new Nullable<T745>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do746(T746 t) {
+ Nullable<T746> n = new Nullable<T746>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do747(T747 t) {
+ Nullable<T747> n = new Nullable<T747>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do748(T748 t) {
+ Nullable<T748> n = new Nullable<T748>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do749(T749 t) {
+ Nullable<T749> n = new Nullable<T749>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do750(T750 t) {
+ Nullable<T750> n = new Nullable<T750>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do751(T751 t) {
+ Nullable<T751> n = new Nullable<T751>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do752(T752 t) {
+ Nullable<T752> n = new Nullable<T752>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do753(T753 t) {
+ Nullable<T753> n = new Nullable<T753>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do754(T754 t) {
+ Nullable<T754> n = new Nullable<T754>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do755(T755 t) {
+ Nullable<T755> n = new Nullable<T755>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do756(T756 t) {
+ Nullable<T756> n = new Nullable<T756>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do757(T757 t) {
+ Nullable<T757> n = new Nullable<T757>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do758(T758 t) {
+ Nullable<T758> n = new Nullable<T758>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do759(T759 t) {
+ Nullable<T759> n = new Nullable<T759>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do760(T760 t) {
+ Nullable<T760> n = new Nullable<T760>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do761(T761 t) {
+ Nullable<T761> n = new Nullable<T761>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do762(T762 t) {
+ Nullable<T762> n = new Nullable<T762>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do763(T763 t) {
+ Nullable<T763> n = new Nullable<T763>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do764(T764 t) {
+ Nullable<T764> n = new Nullable<T764>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do765(T765 t) {
+ Nullable<T765> n = new Nullable<T765>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do766(T766 t) {
+ Nullable<T766> n = new Nullable<T766>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do767(T767 t) {
+ Nullable<T767> n = new Nullable<T767>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do768(T768 t) {
+ Nullable<T768> n = new Nullable<T768>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do769(T769 t) {
+ Nullable<T769> n = new Nullable<T769>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do770(T770 t) {
+ Nullable<T770> n = new Nullable<T770>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do771(T771 t) {
+ Nullable<T771> n = new Nullable<T771>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do772(T772 t) {
+ Nullable<T772> n = new Nullable<T772>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do773(T773 t) {
+ Nullable<T773> n = new Nullable<T773>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do774(T774 t) {
+ Nullable<T774> n = new Nullable<T774>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do775(T775 t) {
+ Nullable<T775> n = new Nullable<T775>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do776(T776 t) {
+ Nullable<T776> n = new Nullable<T776>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do777(T777 t) {
+ Nullable<T777> n = new Nullable<T777>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do778(T778 t) {
+ Nullable<T778> n = new Nullable<T778>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do779(T779 t) {
+ Nullable<T779> n = new Nullable<T779>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do780(T780 t) {
+ Nullable<T780> n = new Nullable<T780>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do781(T781 t) {
+ Nullable<T781> n = new Nullable<T781>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do782(T782 t) {
+ Nullable<T782> n = new Nullable<T782>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do783(T783 t) {
+ Nullable<T783> n = new Nullable<T783>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do784(T784 t) {
+ Nullable<T784> n = new Nullable<T784>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do785(T785 t) {
+ Nullable<T785> n = new Nullable<T785>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do786(T786 t) {
+ Nullable<T786> n = new Nullable<T786>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do787(T787 t) {
+ Nullable<T787> n = new Nullable<T787>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do788(T788 t) {
+ Nullable<T788> n = new Nullable<T788>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do789(T789 t) {
+ Nullable<T789> n = new Nullable<T789>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do790(T790 t) {
+ Nullable<T790> n = new Nullable<T790>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do791(T791 t) {
+ Nullable<T791> n = new Nullable<T791>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do792(T792 t) {
+ Nullable<T792> n = new Nullable<T792>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do793(T793 t) {
+ Nullable<T793> n = new Nullable<T793>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do794(T794 t) {
+ Nullable<T794> n = new Nullable<T794>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do795(T795 t) {
+ Nullable<T795> n = new Nullable<T795>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do796(T796 t) {
+ Nullable<T796> n = new Nullable<T796>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do797(T797 t) {
+ Nullable<T797> n = new Nullable<T797>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do798(T798 t) {
+ Nullable<T798> n = new Nullable<T798>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do799(T799 t) {
+ Nullable<T799> n = new Nullable<T799>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do800(T800 t) {
+ Nullable<T800> n = new Nullable<T800>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do801(T801 t) {
+ Nullable<T801> n = new Nullable<T801>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do802(T802 t) {
+ Nullable<T802> n = new Nullable<T802>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do803(T803 t) {
+ Nullable<T803> n = new Nullable<T803>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do804(T804 t) {
+ Nullable<T804> n = new Nullable<T804>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do805(T805 t) {
+ Nullable<T805> n = new Nullable<T805>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do806(T806 t) {
+ Nullable<T806> n = new Nullable<T806>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do807(T807 t) {
+ Nullable<T807> n = new Nullable<T807>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do808(T808 t) {
+ Nullable<T808> n = new Nullable<T808>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do809(T809 t) {
+ Nullable<T809> n = new Nullable<T809>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do810(T810 t) {
+ Nullable<T810> n = new Nullable<T810>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do811(T811 t) {
+ Nullable<T811> n = new Nullable<T811>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do812(T812 t) {
+ Nullable<T812> n = new Nullable<T812>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do813(T813 t) {
+ Nullable<T813> n = new Nullable<T813>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do814(T814 t) {
+ Nullable<T814> n = new Nullable<T814>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do815(T815 t) {
+ Nullable<T815> n = new Nullable<T815>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do816(T816 t) {
+ Nullable<T816> n = new Nullable<T816>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do817(T817 t) {
+ Nullable<T817> n = new Nullable<T817>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do818(T818 t) {
+ Nullable<T818> n = new Nullable<T818>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do819(T819 t) {
+ Nullable<T819> n = new Nullable<T819>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do820(T820 t) {
+ Nullable<T820> n = new Nullable<T820>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do821(T821 t) {
+ Nullable<T821> n = new Nullable<T821>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do822(T822 t) {
+ Nullable<T822> n = new Nullable<T822>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do823(T823 t) {
+ Nullable<T823> n = new Nullable<T823>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do824(T824 t) {
+ Nullable<T824> n = new Nullable<T824>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do825(T825 t) {
+ Nullable<T825> n = new Nullable<T825>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do826(T826 t) {
+ Nullable<T826> n = new Nullable<T826>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do827(T827 t) {
+ Nullable<T827> n = new Nullable<T827>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do828(T828 t) {
+ Nullable<T828> n = new Nullable<T828>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do829(T829 t) {
+ Nullable<T829> n = new Nullable<T829>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do830(T830 t) {
+ Nullable<T830> n = new Nullable<T830>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do831(T831 t) {
+ Nullable<T831> n = new Nullable<T831>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do832(T832 t) {
+ Nullable<T832> n = new Nullable<T832>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do833(T833 t) {
+ Nullable<T833> n = new Nullable<T833>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do834(T834 t) {
+ Nullable<T834> n = new Nullable<T834>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do835(T835 t) {
+ Nullable<T835> n = new Nullable<T835>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do836(T836 t) {
+ Nullable<T836> n = new Nullable<T836>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do837(T837 t) {
+ Nullable<T837> n = new Nullable<T837>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do838(T838 t) {
+ Nullable<T838> n = new Nullable<T838>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do839(T839 t) {
+ Nullable<T839> n = new Nullable<T839>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do840(T840 t) {
+ Nullable<T840> n = new Nullable<T840>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do841(T841 t) {
+ Nullable<T841> n = new Nullable<T841>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do842(T842 t) {
+ Nullable<T842> n = new Nullable<T842>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do843(T843 t) {
+ Nullable<T843> n = new Nullable<T843>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do844(T844 t) {
+ Nullable<T844> n = new Nullable<T844>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do845(T845 t) {
+ Nullable<T845> n = new Nullable<T845>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do846(T846 t) {
+ Nullable<T846> n = new Nullable<T846>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do847(T847 t) {
+ Nullable<T847> n = new Nullable<T847>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do848(T848 t) {
+ Nullable<T848> n = new Nullable<T848>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do849(T849 t) {
+ Nullable<T849> n = new Nullable<T849>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do850(T850 t) {
+ Nullable<T850> n = new Nullable<T850>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do851(T851 t) {
+ Nullable<T851> n = new Nullable<T851>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do852(T852 t) {
+ Nullable<T852> n = new Nullable<T852>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do853(T853 t) {
+ Nullable<T853> n = new Nullable<T853>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do854(T854 t) {
+ Nullable<T854> n = new Nullable<T854>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do855(T855 t) {
+ Nullable<T855> n = new Nullable<T855>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do856(T856 t) {
+ Nullable<T856> n = new Nullable<T856>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do857(T857 t) {
+ Nullable<T857> n = new Nullable<T857>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do858(T858 t) {
+ Nullable<T858> n = new Nullable<T858>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do859(T859 t) {
+ Nullable<T859> n = new Nullable<T859>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do860(T860 t) {
+ Nullable<T860> n = new Nullable<T860>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do861(T861 t) {
+ Nullable<T861> n = new Nullable<T861>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do862(T862 t) {
+ Nullable<T862> n = new Nullable<T862>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do863(T863 t) {
+ Nullable<T863> n = new Nullable<T863>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do864(T864 t) {
+ Nullable<T864> n = new Nullable<T864>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do865(T865 t) {
+ Nullable<T865> n = new Nullable<T865>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do866(T866 t) {
+ Nullable<T866> n = new Nullable<T866>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do867(T867 t) {
+ Nullable<T867> n = new Nullable<T867>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do868(T868 t) {
+ Nullable<T868> n = new Nullable<T868>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do869(T869 t) {
+ Nullable<T869> n = new Nullable<T869>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do870(T870 t) {
+ Nullable<T870> n = new Nullable<T870>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do871(T871 t) {
+ Nullable<T871> n = new Nullable<T871>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do872(T872 t) {
+ Nullable<T872> n = new Nullable<T872>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do873(T873 t) {
+ Nullable<T873> n = new Nullable<T873>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do874(T874 t) {
+ Nullable<T874> n = new Nullable<T874>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do875(T875 t) {
+ Nullable<T875> n = new Nullable<T875>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do876(T876 t) {
+ Nullable<T876> n = new Nullable<T876>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do877(T877 t) {
+ Nullable<T877> n = new Nullable<T877>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do878(T878 t) {
+ Nullable<T878> n = new Nullable<T878>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do879(T879 t) {
+ Nullable<T879> n = new Nullable<T879>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do880(T880 t) {
+ Nullable<T880> n = new Nullable<T880>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do881(T881 t) {
+ Nullable<T881> n = new Nullable<T881>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do882(T882 t) {
+ Nullable<T882> n = new Nullable<T882>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do883(T883 t) {
+ Nullable<T883> n = new Nullable<T883>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do884(T884 t) {
+ Nullable<T884> n = new Nullable<T884>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do885(T885 t) {
+ Nullable<T885> n = new Nullable<T885>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do886(T886 t) {
+ Nullable<T886> n = new Nullable<T886>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do887(T887 t) {
+ Nullable<T887> n = new Nullable<T887>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do888(T888 t) {
+ Nullable<T888> n = new Nullable<T888>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do889(T889 t) {
+ Nullable<T889> n = new Nullable<T889>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do890(T890 t) {
+ Nullable<T890> n = new Nullable<T890>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do891(T891 t) {
+ Nullable<T891> n = new Nullable<T891>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do892(T892 t) {
+ Nullable<T892> n = new Nullable<T892>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do893(T893 t) {
+ Nullable<T893> n = new Nullable<T893>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do894(T894 t) {
+ Nullable<T894> n = new Nullable<T894>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do895(T895 t) {
+ Nullable<T895> n = new Nullable<T895>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do896(T896 t) {
+ Nullable<T896> n = new Nullable<T896>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do897(T897 t) {
+ Nullable<T897> n = new Nullable<T897>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do898(T898 t) {
+ Nullable<T898> n = new Nullable<T898>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do899(T899 t) {
+ Nullable<T899> n = new Nullable<T899>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do900(T900 t) {
+ Nullable<T900> n = new Nullable<T900>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do901(T901 t) {
+ Nullable<T901> n = new Nullable<T901>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do902(T902 t) {
+ Nullable<T902> n = new Nullable<T902>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do903(T903 t) {
+ Nullable<T903> n = new Nullable<T903>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do904(T904 t) {
+ Nullable<T904> n = new Nullable<T904>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do905(T905 t) {
+ Nullable<T905> n = new Nullable<T905>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do906(T906 t) {
+ Nullable<T906> n = new Nullable<T906>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do907(T907 t) {
+ Nullable<T907> n = new Nullable<T907>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do908(T908 t) {
+ Nullable<T908> n = new Nullable<T908>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do909(T909 t) {
+ Nullable<T909> n = new Nullable<T909>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do910(T910 t) {
+ Nullable<T910> n = new Nullable<T910>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do911(T911 t) {
+ Nullable<T911> n = new Nullable<T911>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do912(T912 t) {
+ Nullable<T912> n = new Nullable<T912>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do913(T913 t) {
+ Nullable<T913> n = new Nullable<T913>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do914(T914 t) {
+ Nullable<T914> n = new Nullable<T914>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do915(T915 t) {
+ Nullable<T915> n = new Nullable<T915>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do916(T916 t) {
+ Nullable<T916> n = new Nullable<T916>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do917(T917 t) {
+ Nullable<T917> n = new Nullable<T917>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do918(T918 t) {
+ Nullable<T918> n = new Nullable<T918>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do919(T919 t) {
+ Nullable<T919> n = new Nullable<T919>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do920(T920 t) {
+ Nullable<T920> n = new Nullable<T920>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do921(T921 t) {
+ Nullable<T921> n = new Nullable<T921>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do922(T922 t) {
+ Nullable<T922> n = new Nullable<T922>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do923(T923 t) {
+ Nullable<T923> n = new Nullable<T923>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do924(T924 t) {
+ Nullable<T924> n = new Nullable<T924>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do925(T925 t) {
+ Nullable<T925> n = new Nullable<T925>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do926(T926 t) {
+ Nullable<T926> n = new Nullable<T926>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do927(T927 t) {
+ Nullable<T927> n = new Nullable<T927>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do928(T928 t) {
+ Nullable<T928> n = new Nullable<T928>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do929(T929 t) {
+ Nullable<T929> n = new Nullable<T929>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do930(T930 t) {
+ Nullable<T930> n = new Nullable<T930>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do931(T931 t) {
+ Nullable<T931> n = new Nullable<T931>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do932(T932 t) {
+ Nullable<T932> n = new Nullable<T932>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do933(T933 t) {
+ Nullable<T933> n = new Nullable<T933>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do934(T934 t) {
+ Nullable<T934> n = new Nullable<T934>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do935(T935 t) {
+ Nullable<T935> n = new Nullable<T935>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do936(T936 t) {
+ Nullable<T936> n = new Nullable<T936>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do937(T937 t) {
+ Nullable<T937> n = new Nullable<T937>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do938(T938 t) {
+ Nullable<T938> n = new Nullable<T938>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do939(T939 t) {
+ Nullable<T939> n = new Nullable<T939>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do940(T940 t) {
+ Nullable<T940> n = new Nullable<T940>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do941(T941 t) {
+ Nullable<T941> n = new Nullable<T941>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do942(T942 t) {
+ Nullable<T942> n = new Nullable<T942>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do943(T943 t) {
+ Nullable<T943> n = new Nullable<T943>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do944(T944 t) {
+ Nullable<T944> n = new Nullable<T944>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do945(T945 t) {
+ Nullable<T945> n = new Nullable<T945>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do946(T946 t) {
+ Nullable<T946> n = new Nullable<T946>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do947(T947 t) {
+ Nullable<T947> n = new Nullable<T947>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do948(T948 t) {
+ Nullable<T948> n = new Nullable<T948>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do949(T949 t) {
+ Nullable<T949> n = new Nullable<T949>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do950(T950 t) {
+ Nullable<T950> n = new Nullable<T950>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do951(T951 t) {
+ Nullable<T951> n = new Nullable<T951>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do952(T952 t) {
+ Nullable<T952> n = new Nullable<T952>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do953(T953 t) {
+ Nullable<T953> n = new Nullable<T953>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do954(T954 t) {
+ Nullable<T954> n = new Nullable<T954>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do955(T955 t) {
+ Nullable<T955> n = new Nullable<T955>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do956(T956 t) {
+ Nullable<T956> n = new Nullable<T956>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do957(T957 t) {
+ Nullable<T957> n = new Nullable<T957>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do958(T958 t) {
+ Nullable<T958> n = new Nullable<T958>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do959(T959 t) {
+ Nullable<T959> n = new Nullable<T959>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do960(T960 t) {
+ Nullable<T960> n = new Nullable<T960>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do961(T961 t) {
+ Nullable<T961> n = new Nullable<T961>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do962(T962 t) {
+ Nullable<T962> n = new Nullable<T962>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do963(T963 t) {
+ Nullable<T963> n = new Nullable<T963>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do964(T964 t) {
+ Nullable<T964> n = new Nullable<T964>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do965(T965 t) {
+ Nullable<T965> n = new Nullable<T965>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do966(T966 t) {
+ Nullable<T966> n = new Nullable<T966>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do967(T967 t) {
+ Nullable<T967> n = new Nullable<T967>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do968(T968 t) {
+ Nullable<T968> n = new Nullable<T968>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do969(T969 t) {
+ Nullable<T969> n = new Nullable<T969>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do970(T970 t) {
+ Nullable<T970> n = new Nullable<T970>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do971(T971 t) {
+ Nullable<T971> n = new Nullable<T971>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do972(T972 t) {
+ Nullable<T972> n = new Nullable<T972>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do973(T973 t) {
+ Nullable<T973> n = new Nullable<T973>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do974(T974 t) {
+ Nullable<T974> n = new Nullable<T974>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do975(T975 t) {
+ Nullable<T975> n = new Nullable<T975>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do976(T976 t) {
+ Nullable<T976> n = new Nullable<T976>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do977(T977 t) {
+ Nullable<T977> n = new Nullable<T977>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do978(T978 t) {
+ Nullable<T978> n = new Nullable<T978>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do979(T979 t) {
+ Nullable<T979> n = new Nullable<T979>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do980(T980 t) {
+ Nullable<T980> n = new Nullable<T980>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do981(T981 t) {
+ Nullable<T981> n = new Nullable<T981>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do982(T982 t) {
+ Nullable<T982> n = new Nullable<T982>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do983(T983 t) {
+ Nullable<T983> n = new Nullable<T983>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do984(T984 t) {
+ Nullable<T984> n = new Nullable<T984>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do985(T985 t) {
+ Nullable<T985> n = new Nullable<T985>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do986(T986 t) {
+ Nullable<T986> n = new Nullable<T986>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do987(T987 t) {
+ Nullable<T987> n = new Nullable<T987>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do988(T988 t) {
+ Nullable<T988> n = new Nullable<T988>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do989(T989 t) {
+ Nullable<T989> n = new Nullable<T989>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do990(T990 t) {
+ Nullable<T990> n = new Nullable<T990>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do991(T991 t) {
+ Nullable<T991> n = new Nullable<T991>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do992(T992 t) {
+ Nullable<T992> n = new Nullable<T992>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do993(T993 t) {
+ Nullable<T993> n = new Nullable<T993>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do994(T994 t) {
+ Nullable<T994> n = new Nullable<T994>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do995(T995 t) {
+ Nullable<T995> n = new Nullable<T995>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do996(T996 t) {
+ Nullable<T996> n = new Nullable<T996>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do997(T997 t) {
+ Nullable<T997> n = new Nullable<T997>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do998(T998 t) {
+ Nullable<T998> n = new Nullable<T998>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Do999(T999 t) {
+ Nullable<T999> n = new Nullable<T999>(t);
+ return Ensure(n.HasValue && n.Value == t);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static bool Ensure(bool pred) {
+ if (!pred)
+ throw new Exception("Ensure fails");
+ return pred;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj b/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj
new file mode 100644
index 0000000000..8b85a6d735
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>nullenum1000</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="nullenum1000.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/307137/vsw307137.cs b/tests/src/Loader/classloader/regressions/307137/vsw307137.cs
new file mode 100644
index 0000000000..bdd05d03d9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/307137/vsw307137.cs
@@ -0,0 +1,66 @@
+// 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.
+
+// this is regression test for VSW 307137
+
+/*
+The bug description has a good summary of the issue (from AtsushiK):
+
+A summary of the whole sordid affair.
+
+
+In V1 and Everett, sequential classes only affected unmanaged layout and the .size metadata was used to add padding to the
+unmanaged layout (IJW used this to implement their unmanaged structures. That's the only reason the .size metadata exists.
+Somewhere along the line, C# started using the .size metadata to implemented fixed buffer arrays inside managed structures.
+They'd declare just one field of the array element type and use the .size metadata to allocate space for the other elements.
+Problem was, the .size metadata was never defined to expand the managed layout. This feature should never have worked.
+
+So how did it work for them? Plain dumb luck. In the CLR, if your structure consists of just one scalar-type field, the CLR
+classifies it internally as a "blittable" structure. That is, it makes the managed layout match the unmanaged layout byte for
+byte so that interop can optimize the marshaling of this structure to a bit-copy. Thus, because of this accidental reliance on
+this internal optimization by the CLR, fixed buffers "worked" for plain old integer/float/double types.
+There was two cases where it wouldn't work: chars and booleans. That's because these datatypes don't translate byte for
+byte (different sizes, bools need normalizing.) So the blitting optimization doesn't kick in in those cases.
+
+Someone found out that the was case for chars and opened VSW:147145. A couple months later, I unwittingly"fixed" this bug
+when I implemented the managed sequential layout feature. This feature now causes the .size metadata to expand out the
+managed layout too (whether this was a good idea is debatable but it got VSW:147145 off the CLR team's back even though
+they didn't understand how it got fixed..)
+
+Now we have the boolean case. Booleans are also non-blittable (they have to be normalized so they aren't blittable even if you
+use a FieldMarshal override to force the native size to 1.) But because both the unmanaged size and managed size impose a
+minimum value on the .size metadata, the .size metadata can't go below 4 (sizeof(BOOL) in Win32 native).
+
+CLR now overrides the .size metadata if it is less than the minimum size needed to hold the fields.
+
+*/
+
+using System;
+
+unsafe struct S
+{
+ fixed bool b[3];
+}
+
+public class Test
+{
+ public static int Main()
+ {
+ try
+ {
+ #pragma warning disable 219
+ S s = new S();
+ #pragma warning restore 219
+
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected excpetion: " + e);
+ return 101;
+ }
+ }
+
+}
diff --git a/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj b/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj
new file mode 100644
index 0000000000..c79c07d4cd
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw307137</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw307137.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/347422/b347422.cs b/tests/src/Loader/classloader/regressions/347422/b347422.cs
new file mode 100644
index 0000000000..7d916dc690
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/347422/b347422.cs
@@ -0,0 +1,49 @@
+// 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.
+
+// this is regression for VSW 347422
+// the issue here was that the exception message was incorrect.
+
+// Expected: System.InvalidCastException: Unable to cast object of type 'System.Object' to type 'IFoo'.
+// Actual: System.InvalidCastException: Unable to cast object of type 'IFoo' to type 'System.Object'.
+
+
+using System;
+
+public interface IFoo{}
+
+public class Casting
+{
+ public static int Main()
+ {
+ Object obj = new Object();
+ try
+ {
+ IFoo f = (IFoo) obj;
+
+ Console.WriteLine("FAIL: Did not catch expected InvalidCastException");
+ return 101;
+
+ }
+ catch(InvalidCastException e)
+ {
+ string msg ="Unable to cast object of type 'System.Object' to type 'IFoo'.";
+
+
+ if (e.Message.Equals(msg) || e.Message.Contains("Debugging resource strings are unavailable"))
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL: Caught expected exception, but error message is incorrect");
+ Console.WriteLine("Expected: " + msg);
+ Console.WriteLine("Actual: " + e.Message);
+
+ return 102;
+ }
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/347422/b347422.csproj b/tests/src/Loader/classloader/regressions/347422/b347422.csproj
new file mode 100644
index 0000000000..434e7d43f0
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/347422/b347422.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>b347422</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="b347422.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/348842/A.cs b/tests/src/Loader/classloader/regressions/348842/A.cs
new file mode 100644
index 0000000000..e3762d456e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/348842/A.cs
@@ -0,0 +1,8 @@
+// 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.
+
+namespace A
+{
+ public interface IPlugin { }
+}
diff --git a/tests/src/Loader/classloader/regressions/348842/A.csproj b/tests/src/Loader/classloader/regressions/348842/A.csproj
new file mode 100644
index 0000000000..48dbfb6f03
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/348842/A.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>A</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="A.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/359519/test359519.cs b/tests/src/Loader/classloader/regressions/359519/test359519.cs
new file mode 100644
index 0000000000..ac1359406b
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/359519/test359519.cs
@@ -0,0 +1,49 @@
+// 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.
+
+// this is a regression test for VSWhidbey 359519
+// a struct Root, has a static field that appears earlier in the metadata than a valuetype instance field.
+
+using System;
+using System.Runtime.InteropServices;
+
+class MainClass
+
+{
+ //Variable
+ [StructLayout(LayoutKind.Explicit, Size=1, Pack=1, CharSet=CharSet.Unicode)]
+ public struct Variable
+ {
+ [FieldOffset(0), MarshalAs(UnmanagedType.I1)]
+ public bool boolean; // A boolean field marshalled as 1 byte)
+ }
+
+ [StructLayout(LayoutKind.Explicit, Size=2, Pack=1, CharSet=CharSet.Unicode)]
+ public struct Root
+ {
+ public static byte byte1;
+ [FieldOffset(8)]
+ public Variable var1;
+ }
+
+ public static int Main(String[] args)
+ {
+ try
+ {
+ Root r = new Root();
+
+ // to remove compiler warning
+ // warning CS0219: The variable 'r' is assigned but its value is never used
+
+ r.ToString();
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("FAIL: Caught unexpected exception - " + e);
+ return 101;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/359519/test359519.csproj b/tests/src/Loader/classloader/regressions/359519/test359519.csproj
new file mode 100644
index 0000000000..6f81e65df2
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/359519/test359519.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test359519</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test359519.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/405223/vsw405223.cs b/tests/src/Loader/classloader/regressions/405223/vsw405223.cs
new file mode 100644
index 0000000000..a1aa8e61f7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/405223/vsw405223.cs
@@ -0,0 +1,29 @@
+// 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.
+
+// Regression test for VSW 405223
+// We shouldn't be able to cast from short[] to char[] or from char[] to short[]
+// since that is the behavior in Everett and we should be consistent in Whidbey.
+
+using System;
+
+class Class1
+{
+ public static int Main()
+ {
+ object o1 = new short[3];
+ object o2 = new char[3];
+
+ if(o1 is char[] || o2 is short[])
+ {
+ Console.WriteLine("FAIL: Was able to cast short[] to char[] or char[] to short[]");
+ return 101;
+ }
+ else
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj b/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj
new file mode 100644
index 0000000000..59f799ce12
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw405223</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw405223.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/421439/RefX1.il b/tests/src/Loader/classloader/regressions/421439/RefX1.il
new file mode 100644
index 0000000000..0434e61744
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/RefX1.il
@@ -0,0 +1,25 @@
+// 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.
+
+.assembly extern System.Console { }
+
+.assembly extern mscorlib {}
+
+.assembly RefX1 {}
+
+.class public auto ansi beforefieldinit RefX1<T>
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+}
+
+
diff --git a/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj b/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj
new file mode 100644
index 0000000000..b1bb38fef0
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>RefX1</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="RefX1.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/421439/Test.il b/tests/src/Loader/classloader/regressions/421439/Test.il
new file mode 100644
index 0000000000..93c0c6f379
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/Test.il
@@ -0,0 +1,65 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib {}
+.assembly extern RefX1 {}
+.assembly extern ValX1 {}
+
+.assembly Test {}
+
+.class public sequential ansi sealed beforefieldinit Gen<T>
+ extends [mscorlib]System.ValueType
+{
+ .field public !T Fld1
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor(!T fld1) cil managed
+ {
+ .maxstack 8
+ nop
+ ldarg.0
+ ldarg.1
+ stfld !0 valuetype Gen<!T>::Fld1
+ ret
+ }
+}
+
+
+// the below lines cause an AV
+// new Gen<ValX1<string>[][][]>(new ValX1<string>[1][][]);
+// new Gen<RefX1<RefX1<RefX1<string>>>>(new RefX1<RefX1<RefX1<string>>>());
+
+.class public auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 8
+ nop
+ ldc.i4.1
+ newarr valuetype [ValX1]ValX1<string>[][]
+ newobj instance void valuetype Gen<valuetype [ValX1]ValX1<string>[][][]>::.ctor(!0)
+ pop
+ newobj instance void class [RefX1]RefX1<class [RefX1]RefX1<class [RefX1]RefX1<string>>>::.ctor()
+ newobj instance void valuetype Gen<class [RefX1]RefX1<class [RefX1]RefX1<class [RefX1]RefX1<string>>>>::.ctor(!0)
+ pop
+
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ ldc.i4 100
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+}
diff --git a/tests/src/Loader/classloader/regressions/421439/Test.ilproj b/tests/src/Loader/classloader/regressions/421439/Test.ilproj
new file mode 100644
index 0000000000..418664f41f
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/Test.ilproj
@@ -0,0 +1,40 @@
+<?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>
+ <AssemblyName>Test</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Test.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="RefX1.ilproj" />
+ <ProjectReference Include="ValX1.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/421439/ValX1.il b/tests/src/Loader/classloader/regressions/421439/ValX1.il
new file mode 100644
index 0000000000..4335a7839a
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/ValX1.il
@@ -0,0 +1,18 @@
+// 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.
+
+.assembly extern System.Console { }
+
+.assembly extern mscorlib {}
+
+.assembly ValX1 {}
+
+
+.class public sequential ansi sealed beforefieldinit ValX1<T>
+ extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+}
+
diff --git a/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj b/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj
new file mode 100644
index 0000000000..89c9f3d444
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>ValX1</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="ValX1.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/429802/BarImpl.il b/tests/src/Loader/classloader/regressions/429802/BarImpl.il
new file mode 100644
index 0000000000..af6e235e84
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/BarImpl.il
@@ -0,0 +1,75 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.41217
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern MyBar
+{
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_2
+{
+ .ver 2:0:0:0
+}
+.assembly BarImpl
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01C3371C-004D-0000-A745-03831C37C341}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit BarImpl
+ extends [MyBar]MyBar
+{
+ .method public hidebysig virtual instance int32
+ DoBar() cil managed
+ {
+ // Code size 14 (0xe)
+ .maxstack 1
+ .locals init (int32 V_0)
+ IL_0000: ldstr "In BarImpl.DoBar"
+ IL_0005: call void [mscorlib_2]System.Console::WriteLine(string)
+ IL_000a: ldc.i4.2
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: ret
+ } // end of method BarImpl::DoBar
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [MyBar]MyBar::.ctor()
+ IL_0006: ret
+ } // end of method BarImpl::.ctor
+
+} // end of class BarImpl
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj b/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj
new file mode 100644
index 0000000000..ed13a887cc
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>BarImpl</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="BarImpl.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="MyBar.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/429802/CMain.il b/tests/src/Loader/classloader/regressions/429802/CMain.il
new file mode 100644
index 0000000000..da86838fae
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/CMain.il
@@ -0,0 +1,127 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.41217
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_1
+{
+ .ver 2:0:0:0
+}
+.assembly extern BarImpl
+{
+ .ver 0:0:0:0
+}
+.assembly extern MyBar
+{
+ .ver 0:0:0:0
+}
+.assembly CMain
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01C3371C-004D-0000-A745-03831C37C341}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit CMain
+ extends [mscorlib_1]System.Object
+{
+ .method public hidebysig static int32 Main(string[] args) cil managed
+ {
+ .entrypoint
+ // Code size 106 (0x6a)
+ .maxstack 2
+ .locals init (bool V_0,
+ class [BarImpl]BarImpl V_1,
+ class [MyBar]MyBar V_2,
+ int32 V_3)
+ IL_0000: ldc.i4.1
+ IL_0001: stloc.0
+ IL_0002: newobj instance void [BarImpl]BarImpl::.ctor()
+ IL_0007: stloc.1
+ IL_0008: ldc.i4.2
+ IL_0009: ldloc.1
+ IL_000a: callvirt instance int32 [MyBar]MyBar::DoBar()
+ IL_000f: beq.s IL_001d
+
+ IL_0011: ldstr "FAIL: expected BarImpl.DoBar to execute, but anoth"
+ + "er method was executed instead."
+ IL_0016: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_001b: ldc.i4.0
+ IL_001c: stloc.0
+ IL_001d: ldloc.1
+ IL_001e: stloc.2
+ IL_001f: ldc.i4.2
+ IL_0020: ldloc.2
+ IL_0021: callvirt instance int32 [MyBar]MyBar::DoBar()
+ IL_0026: beq.s IL_0034
+
+ IL_0028: ldstr "FAIL: expected BarImpl.DoBar to execute, but anoth"
+ + "er method was executed instead."
+ IL_002d: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_0032: ldc.i4.0
+ IL_0033: stloc.0
+ IL_0034: ldc.i4.1
+ IL_0035: ldloc.2
+ IL_0036: call instance int32 [MyBar]MyBar::DoBar()
+ IL_003b: beq.s IL_0049
+
+ IL_003d: ldstr "FAIL: expected MyBar.DoSelfBar to execute, but ano"
+ + "ther method was executed instead."
+ IL_0042: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_0047: ldc.i4.0
+ IL_0048: stloc.0
+ IL_0049: ldloc.0
+ IL_004a: brtrue.s IL_005b
+
+ IL_004c: ldc.i4.s 101
+ IL_004e: stloc.3
+ IL_004f: ldstr "FAIL"
+ IL_0054: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_0059: br.s IL_0068
+
+ IL_005b: ldc.i4.s 100
+ IL_005d: stloc.3
+ IL_005e: ldstr "PASS"
+ IL_0063: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_0068: ldloc.3
+ IL_0069: ret
+ } // end of method CMain::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib_1]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method CMain::.ctor
+
+} // end of class CMain
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/429802/CMain.ilproj b/tests/src/Loader/classloader/regressions/429802/CMain.ilproj
new file mode 100644
index 0000000000..50fdb9b7bf
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/CMain.ilproj
@@ -0,0 +1,40 @@
+<?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>
+ <AssemblyName>CMain</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="CMain.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="BarImpl.ilproj" />
+ <ProjectReference Include="MyBar.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/429802/MyBar.il b/tests/src/Loader/classloader/regressions/429802/MyBar.il
new file mode 100644
index 0000000000..4c8cfb88cb
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/MyBar.il
@@ -0,0 +1,77 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.41217
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_1
+{
+ .ver 2:0:0:0
+}
+.assembly MyBar
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01C3371C-004D-0000-A745-03831C37C341}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi beforefieldinit MyBar
+ extends [mscorlib_1]System.Object
+{
+ .method public hidebysig newslot abstract virtual
+ instance int32 DoBar() cil managed
+ {
+ } // end of method MyBar::DoBar
+
+ .method public hidebysig virtual instance int32
+ DoSelfBar() cil managed
+ {
+ .override MyBar::DoBar
+ // Code size 14 (0xe)
+ .maxstack 1
+ .locals init (int32 V_0)
+ IL_0000: ldstr "In MyBar.DoSelfBar"
+ IL_0005: call void [mscorlib_1]System.Console::WriteLine(string)
+ IL_000a: ldc.i4.1
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: ret
+ } // end of method MyBar::DoSelfBar
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib_1]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyBar::.ctor
+
+} // end of class MyBar
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj b/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj
new file mode 100644
index 0000000000..fd46420bd7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>MyBar</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="MyBar.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj b/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj
new file mode 100644
index 0000000000..560c1e1614
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>b434481_GenericRecurInit</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="b434481_genericrecurinit.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs b/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs
new file mode 100644
index 0000000000..2d37258573
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs
@@ -0,0 +1,75 @@
+// 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.
+
+using System;
+
+internal class Program
+{
+ private static int Main()
+ {
+ int iErrorCount = 0;
+ String tstr = null;
+ try{
+ S<int> i = new S<int>();
+ tstr = i.ToString();
+ System.Console.WriteLine(tstr);
+ if( tstr != "Program+S`1[System.Int32]" )
+ {
+ Console.WriteLine( "Err_01: Expected type: Program+S`1[System.Int32]" );
+ Console.WriteLine( "Err_01: Actualy get type: " + tstr );
+ iErrorCount++;
+ }
+ S<object> o = new S<object>();
+ tstr = o.ToString();
+ System.Console.WriteLine(tstr);
+ if( tstr != "Program+S`1[System.Object]" )
+ {
+ Console.WriteLine( "Err_02: Expected type: Program+S`1[System.Object]" );
+ Console.WriteLine( "Err_02: Actualy get type: " + tstr );
+ iErrorCount++;
+ }
+
+ S<string> s = new S<string>();
+ tstr = s.ToString();
+ System.Console.WriteLine(tstr);
+ if( tstr != "Program+S`1[System.String]" )
+ {
+ Console.WriteLine( "Err_01: Expected type: Program+S`1[System.String]" );
+ Console.WriteLine( "Err_01: Actualy get type: " + tstr );
+ iErrorCount++;
+ }
+ S<Program> p = new S<Program>();
+ tstr = p.ToString();
+ System.Console.WriteLine(tstr);
+ if( tstr != "Program+S`1[Program]" )
+ {
+ Console.WriteLine( "Err_01: Expected type: Program+S`1[Program]" );
+ Console.WriteLine( "Err_01: Actualy get type: " + tstr );
+ iErrorCount++;
+ }
+ }catch( Exception e)
+ {
+ Console.WriteLine( "Unexpected: " + e );
+ iErrorCount++;
+ }
+ if( iErrorCount > 0 )
+ {
+ Console.WriteLine( "Test Failed" );
+ return 101;
+ }
+ else {
+ Console.WriteLine( "Test passed" );
+ return 100;
+ }
+
+ }
+
+ public struct S<T>
+ {
+#pragma warning disable 0414
+ public static S<T> Foo = new S<T>();
+#pragma warning restore 0414
+
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/440935/Bar.il b/tests/src/Loader/classloader/regressions/440935/Bar.il
new file mode 100644
index 0000000000..31d946f45f
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Bar.il
@@ -0,0 +1,75 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.50117
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_1
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly Bar
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01EC94B1-004D-0000-A745-0383B194EC41}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi Bar<T>
+ extends [mscorlib_1]System.Object
+{
+ .method public hidebysig specialname rtspecialname static
+ void .cctor() cil managed
+ {
+ // Code size 13 (0xd)
+ .maxstack 8
+ IL_000b: nop
+ IL_000c: ret
+ } // end of method Bar::.cctor
+
+ .method public hidebysig static void BarMeth() cil managed
+ {
+ // Code size 2 (0x2)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: ret
+ } // end of method Bar::BarMeth
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib_1]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Bar::.ctor
+
+} // end of class Bar
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/440935/Bar.ilproj b/tests/src/Loader/classloader/regressions/440935/Bar.ilproj
new file mode 100644
index 0000000000..91dafdf0f1
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Bar.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Bar</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Bar.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/440935/Foo.il b/tests/src/Loader/classloader/regressions/440935/Foo.il
new file mode 100644
index 0000000000..c987e47435
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Foo.il
@@ -0,0 +1,72 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.50117
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_1
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly extern Bar
+{
+ .ver 0:0:0:0
+}
+.assembly Foo
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01EC94B1-004D-0000-A745-0383B194EC41}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit Foo
+ extends [mscorlib_1]System.Object
+{
+ .method public hidebysig static void Meth() cil managed
+ {
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: call void class [Bar]Bar<int32>::BarMeth()
+ IL_0006: nop
+ IL_0007: ret
+ } // end of method Foo::Meth
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib_1]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Foo::.ctor
+
+} // end of class Foo
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/440935/Foo.ilproj b/tests/src/Loader/classloader/regressions/440935/Foo.ilproj
new file mode 100644
index 0000000000..badbbdf8f0
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Foo.ilproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Foo</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Foo.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Bar.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/440935/Test.il b/tests/src/Loader/classloader/regressions/440935/Test.il
new file mode 100644
index 0000000000..be376a5da8
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Test.il
@@ -0,0 +1,75 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00
+// Copyright (C) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.50117
+.assembly extern retargetable mscorlib
+{
+ .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3".
+ .ver 0:0:0:0
+}
+.assembly extern mscorlib as mscorlib_1
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly extern Foo
+{
+ .ver 0:0:0:0
+}
+.assembly Test
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module M
+// MVID: {01EC94B1-004D-0000-A745-0383B194EC41}
+.imagebase 0x034f0000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03090000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit Test
+ extends [mscorlib_1]System.Object
+{
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: call void [Foo]Foo::Meth()
+ IL_0006: nop
+
+ ldc.i4 100
+ IL_0007: ret
+ } // end of method Test::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib_1]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Test::.ctor
+
+} // end of class Test
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/440935/Test.ilproj b/tests/src/Loader/classloader/regressions/440935/Test.ilproj
new file mode 100644
index 0000000000..fed6e241a9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/440935/Test.ilproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Test</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Test.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Foo.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/451034/LoadType.cs b/tests/src/Loader/classloader/regressions/451034/LoadType.cs
new file mode 100644
index 0000000000..f6430da01a
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/451034/LoadType.cs
@@ -0,0 +1,20 @@
+// 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.
+
+// this is regression test for VSW 451034
+// ngening the assembly and running it resulted in AV
+
+using System;
+
+public class Test
+{
+ public static int Main()
+ {
+ S s = CReloc5<char>.s;
+
+ Console.WriteLine("PASS");
+ return 100;
+
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/451034/LoadType.csproj b/tests/src/Loader/classloader/regressions/451034/LoadType.csproj
new file mode 100644
index 0000000000..32b8b70106
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/451034/LoadType.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>LoadType</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="LoadType.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Type.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/451034/Type.il b/tests/src/Loader/classloader/regressions/451034/Type.il
new file mode 100644
index 0000000000..a6cd0a5d4c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/451034/Type.il
@@ -0,0 +1,45 @@
+// 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.
+
+.assembly extern System.Console { }
+
+
+.assembly Type{}
+.assembly extern mscorlib {}
+
+.data i1data = int32(43962)
+
+.class public sequential ansi sealed beforefieldinit S
+ extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+} // end of class S
+
+
+// Generics + RVA (Field ValueType)
+.class public CReloc8<T>
+{
+ .field public static valuetype S s at i1data
+
+}
+
+
+.class public auto ansi beforefieldinit CReloc5<T>
+ extends [mscorlib]System.Object
+{
+ .field public static valuetype S s
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyData::.ctor
+
+} // end of class MyData
+
diff --git a/tests/src/Loader/classloader/regressions/451034/Type.ilproj b/tests/src/Loader/classloader/regressions/451034/Type.ilproj
new file mode 100644
index 0000000000..9f7ccd5687
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/451034/Type.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Type</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Type.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/452434/vsw452434.il b/tests/src/Loader/classloader/regressions/452434/vsw452434.il
new file mode 100644
index 0000000000..71b0ca6f58
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/452434/vsw452434.il
@@ -0,0 +1,33 @@
+// 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.
+
+.assembly extern System.Console { }
+// this is regression test for VSW 452434.
+// The issue here was that we are using the same RVA multiple times which created a problem when ngening the image.
+
+.assembly Type{}
+.assembly extern mscorlib {}
+
+.data i1data = int32(43962)
+
+// RVA (Field ValueType)
+.class public CReloc8
+{
+ .field public static valuetype S1 s1 at i1data
+ .field public static valuetype S2 s2 at i1data
+}
+
+.class public sequential ansi sealed beforefieldinit S1
+ extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+} // end of class S
+
+.class public sequential ansi sealed beforefieldinit S2
+ extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 2
+} // end of class S
diff --git a/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj b/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj
new file mode 100644
index 0000000000..5071f53a52
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw452434</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw452434.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/452707/b452707.il b/tests/src/Loader/classloader/regressions/452707/b452707.il
new file mode 100644
index 0000000000..28f0d8d908
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/452707/b452707.il
@@ -0,0 +1,67 @@
+// 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.
+
+.assembly extern System.Console { }
+// this is regression test for VSW 452707
+// Overriding MyS.ToString caused an AV since we were attempting to create precode
+// before the slot that the method desc points to has been filled in.
+
+.assembly extern mscorlib {}
+
+.assembly b452707 {}
+.module b452707.exe
+
+.class private sequential ansi sealed beforefieldinit MyS
+ extends [mscorlib]System.ValueType
+{
+ .method public hidebysig virtual instance string
+ Bla() cil managed
+ {
+ .override [mscorlib]System.ValueType::ToString
+
+ .maxstack 1
+ .locals init (string V_0)
+ nop
+ ldstr "MyS.ToString"
+ stloc.0
+ ldloc.0
+ ret
+ }
+}
+
+
+.class private auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+
+ .maxstack 1
+ .locals init (valuetype MyS V_0)
+ nop
+ ldloca.s V_0
+ initobj MyS
+ ldloc.0
+ box MyS
+ call void [System.Console]System.Console::WriteLine(object)
+ nop
+
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ ldc.i4 100
+ ret
+ }
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ .maxstack 8
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+}
diff --git a/tests/src/Loader/classloader/regressions/452707/b452707.ilproj b/tests/src/Loader/classloader/regressions/452707/b452707.ilproj
new file mode 100644
index 0000000000..b947ade1e8
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/452707/b452707.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>b452707</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="b452707.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/523654/test532654_b.cs b/tests/src/Loader/classloader/regressions/523654/test532654_b.cs
new file mode 100644
index 0000000000..860c2d64e9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/523654/test532654_b.cs
@@ -0,0 +1,190 @@
+// 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.
+
+/*
+This test is for VSW 523654.
+
+Before the fix we were doing the following:
+
+take loader lock
+look for a MethodDesc in the hash table
+didn't find it so create a new MethodDesc (MD)
+add it to the hash table
+release the lock
+
+But the problem with this is that during creation of MethodDesc we were looking at the type handle and
+calling managed code while holding the lock and that could potentially lead to a deadlock.
+
+After the fix we do the following:
+
+take loader lock
+look for a MethodDesc in the hash table
+didn't find it, release the lock
+
+create a new MethodDesc
+
+take the lock again
+check that no one added the MethodDesc while we were creating it
+If not there, add it to the hash table
+Otherwise the MethodDesc is already in there
+release the lock
+
+There was a concern about race conditions for the scenario where we don't find the MD the first time
+but find it the 2nd time.
+This test calls the same method from 10 threads so that we would hit this scenario. But this code path
+is only hit non-deterministically some of the time.
+*/
+
+using System;
+using System.Threading;
+
+public class A
+{
+ public static int i = 0;
+
+ public void meth<T>()
+ {
+ Console.WriteLine(Thread.CurrentThread.Name + ": Inside meth<int>");
+ Interlocked.Increment(ref i);
+ }
+}
+
+public class Test
+{
+ public static void RunTestThread1()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread2()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread3()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread4()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread5()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread6()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread7()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread8()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread9()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+ public static void RunTestThread10()
+ {
+ A obj = new A();
+ obj.meth<int>();
+ }
+
+
+ public static int Main()
+ {
+
+ Thread t1 = new Thread(RunTestThread1);
+ t1.Name = "T1";
+
+ Thread t2 = new Thread(RunTestThread2);
+ t2.Name = "T2";
+
+ Thread t3 = new Thread(RunTestThread3);
+ t3.Name = "T3";
+
+ Thread t4 = new Thread(RunTestThread4);
+ t4.Name = "T4";
+
+ Thread t5 = new Thread(RunTestThread5);
+ t5.Name = "T5";
+
+ Thread t6 = new Thread(RunTestThread6);
+ t6.Name = "T6";
+
+ Thread t7 = new Thread(RunTestThread7);
+ t7.Name = "T7";
+
+ Thread t8 = new Thread(RunTestThread8);
+ t8.Name = "T8";
+
+ Thread t9 = new Thread(RunTestThread9);
+ t9.Name = "T9";
+
+ Thread t10 = new Thread(RunTestThread10);
+ t10.Name = "T10";
+
+ t1.Start();
+ t2.Start();
+ t3.Start();
+ t4.Start();
+ t5.Start();
+
+ t6.Start();
+ t7.Start();
+ t8.Start();
+ t9.Start();
+ t10.Start();
+
+
+ t1.Join();
+ t2.Join();
+ t3.Join();
+ t4.Join();
+ t5.Join();
+
+ t6.Join();
+ t7.Join();
+ t8.Join();
+ t9.Join();
+ t10.Join();
+
+
+ Console.WriteLine("i should be 10");
+ Console.WriteLine("i = " + A.i);
+
+ if (A.i != 10)
+ {
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ else
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ }
+
+}
diff --git a/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj b/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj
new file mode 100644
index 0000000000..4857a82a76
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test532654_b</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test532654_b.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il
new file mode 100644
index 0000000000..02341b48ba
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il
@@ -0,0 +1,53 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+
+.assembly moduleCctorThrow {}
+
+
+ .method private hidebysig specialname rtspecialname static
+ void .cctor() cil managed
+ {
+ .maxstack 8
+ nop
+ ldstr "Inside module .cctor"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ newobj instance void [mscorlib]System.Exception::.ctor()
+ throw
+
+ ret
+ } // end of method Foo::.cctor
+
+
+
+.class public auto ansi TriggerModuleCctorClass
+ extends [mscorlib]System.Object
+{
+ .field public static int32 intStatic
+
+ .method public static void CheckInit() noinlining
+ {
+ ret
+ }
+
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+
+ .maxstack 8
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ } // end of method Test1::.ctor
+
+}
+
diff --git a/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj
new file mode 100644
index 0000000000..f0e33fa40a
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>moduleCctorThrow</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="moduleCctorThrow.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs
new file mode 100644
index 0000000000..9bc966a1da
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs
@@ -0,0 +1,93 @@
+// 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.
+
+// regression test for VSWhidbey 529206 for throwing TypeInitialization inside module .cctor
+// We were appending every time the callstack and using the same exception object.
+// Now we still use the same object, but callstack is cleared every time.
+
+
+using System;
+using System.Runtime.CompilerServices;
+
+class Test
+{
+ public static bool pass;
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static void RunTest()
+ {
+ // TRIGGER: static field access, ref type
+ TriggerModuleCctorClass.intStatic = 5;
+ }
+
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static void RunTest2()
+ {
+ // TRIGGER: static field access, ref type
+ TriggerModuleCctorClass.intStatic = 5;
+ }
+
+ public static int Main()
+ {
+ pass = true;
+
+ try
+ {
+ RunTest();
+
+ Console.WriteLine("Did not catch expected TypeInitializationException exception");
+ pass = false;
+ }
+ catch (TypeInitializationException e)
+ {
+ Console.WriteLine("Caught expected exception 1st time\n" + e);
+
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception 1st time: " + e);
+ pass = false;
+ }
+
+
+ try
+ {
+ RunTest2();
+
+ Console.WriteLine("Did not catch expected TypeInitializationException exception");
+ pass = false;
+ }
+ catch (TypeInitializationException e )
+ {
+ Console.WriteLine("Caught expected exception 2nd time\n" + e);
+
+ // if this string is found in the callstack it means we're appending callstack
+ // instead of having a new one each time.
+ if (e.StackTrace.IndexOf("at Test.RunTest()") != -1)
+ {
+ Console.WriteLine("2nd time: Incorrect stack trace");
+ pass = false;
+ }
+
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception 2nd time: " + e);
+ pass = false;
+
+ }
+
+ if (pass)
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj
new file mode 100644
index 0000000000..90fa1610e4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>vsw529206ModuleCctor</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw529206ModuleCctor.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="moduleCctorThrow.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs
new file mode 100644
index 0000000000..e656a19592
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs
@@ -0,0 +1,86 @@
+// 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.
+
+// regression test for VSWhidbey 529206 for throwing TypeInitialization inside class .cctor
+// We were appending every time the callstack and using the same exception object.
+// Now we still use the same object, but callstack is cleared every time.
+
+using System;
+
+class BadInit
+{
+ static BadInit()
+ {
+ Console.WriteLine("BadInit.cctor() called.");
+ throw new ArgumentException("Hi. I'm the exception thrown by BadInit.cctor()");
+ }
+}
+
+
+class Test
+{
+ public static bool pass;
+
+ public static void foo()
+ {
+ Console.WriteLine(new BadInit());
+ }
+
+ public static void One()
+ {
+ try
+ {
+ foo();
+ }
+ catch (TypeInitializationException e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+
+ public static void Two()
+ {
+ try
+ {
+ foo();
+ }
+ catch (TypeInitializationException e)
+ {
+ Console.WriteLine(e);
+
+ // if this string is found in the callstack it means we're appending callstack
+ // instead of having a new one each time.
+ if (e.StackTrace.IndexOf(" at Test.One()") != -1)
+ {
+ Console.WriteLine("2nd time: Incorrect stack trace");
+ pass = false;
+ }
+ }
+
+ }
+
+
+ public static int Main()
+ {
+ pass = true;
+
+ Console.WriteLine("Loading BadInit the first time...\n");
+ One();
+
+ Console.WriteLine("\nLoading BadInit the second time...\n");
+ Two();
+
+ if (pass)
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj
new file mode 100644
index 0000000000..2cf345553e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw529206StaticCctor</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw529206StaticCctor.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/583649/Type_Class42.il b/tests/src/Loader/classloader/regressions/583649/Type_Class42.il
new file mode 100644
index 0000000000..dcb3cfcfe4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/583649/Type_Class42.il
@@ -0,0 +1,29 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib {}
+.assembly Type_Class42 {}
+
+
+.class public sequential sealed beforefieldinit Class42
+ extends [mscorlib]System.Object
+{
+ .field famorassem literal valuetype ValueType147 Field804
+
+ .method public specialname rtspecialname instance void .ctor() cil managed
+ {
+ .maxstack 8
+ ret
+ }
+}
+
+.class value public sequential sealed beforefieldinit ValueType147
+ extends [mscorlib]System.ValueType
+{
+ .field famorassem literal string Field826
+
+
+
+}
diff --git a/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj b/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj
new file mode 100644
index 0000000000..41c86f76b2
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Type_Class42</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Type_Class42.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/583649/vsw583649.cs b/tests/src/Loader/classloader/regressions/583649/vsw583649.cs
new file mode 100644
index 0000000000..01595fba11
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/583649/vsw583649.cs
@@ -0,0 +1,30 @@
+// 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.
+
+// This is regression test for VSW 583649
+// We were AVing due to checking whether the struct ValueType147 is marshalable.
+// The struct contains a literal field and we should ignore marshaling data attached to literals and statics
+
+using System;
+
+public class Type_Class42_Driver
+{
+
+ public static int Main()
+ {
+ try
+ {
+ Console.WriteLine("Instantiating: Class42_0...");
+ Class42 Class42_0 = new Class42();
+
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("FAIL: Caught unexpected exception: " + e.Message);
+ return 101;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj b/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj
new file mode 100644
index 0000000000..1fa3e14954
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>vsw583649</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw583649.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Type_Class42.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs
new file mode 100644
index 0000000000..3039771c9e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs
@@ -0,0 +1,78 @@
+// 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.
+
+// this test verifies that there is no deadlock when we do pumping inside a class constructor
+// from an STA thread.
+
+
+using System;
+
+public class MyWaitForPendingFinalizersClass
+{
+ public MyWaitForPendingFinalizersClass()
+ {
+ Console.WriteLine("Inside MyWaitForPendingFinalizersClass cctor");
+
+ // Wait for all finalizers to complete before continuing.
+ // This is essentially a way to pump in CLR since we are suspending the
+ // current thread until the thread processing the finalization queue has
+ // emptied that queue.
+ // For more info on this see cbrumme's blogg posting on Pumping in the CLR.
+ GC.WaitForPendingFinalizers();
+
+ Console.WriteLine("End of MyWaitForPendingFinalizersClass cctor");
+ }
+}
+
+class MyFinalizeObject
+{
+ ~MyFinalizeObject()
+ {
+ Console.WriteLine("Finalizing a MyFinalizeObject");
+ }
+}
+
+class Test
+{
+ // We can increase this number to fill up more memory.
+ const int numMfos = 10;
+ // We can increase this number to cause more
+ // post-finalization work to be done.
+ const int maxIterations = 10;
+
+ // STA
+ [STAThread]
+ static int Main()
+ {
+ MyFinalizeObject mfo;
+
+ // Create objects that require finalization.
+ for (int j = 0; j < numMfos; j++)
+ {
+ mfo = new MyFinalizeObject();
+ }
+
+ //Force garbage collection.
+ // all finalizable objects will be placed in Finalization queue.
+ GC.Collect();
+
+ MyWaitForPendingFinalizersClass cl = new MyWaitForPendingFinalizersClass();
+
+ // Worker loop to perform post-finalization code.
+ for (int i = 0; i < maxIterations; i++)
+ {
+ Console.WriteLine("Doing some post-finalize work");
+ }
+
+ // if we got to this point, the test passed since no deadlock happened
+ // inside MyWaitForPendingFinalizersClass class constructor.
+ Console.WriteLine("PASS");
+ return 100;
+ }
+}
+
+
+
+
+
diff --git a/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj
new file mode 100644
index 0000000000..44725acaf5
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>pumpFromCctor</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="pumpFromCctor.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs
new file mode 100644
index 0000000000..2c1df95fa6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs
@@ -0,0 +1,50 @@
+// 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.
+
+/* Regression Test for Dev12 bug #518401: Bug in accessing x64 bit Multidimensional Arrays in x64
+ *
+ * Change description: Store the callee saved registers more often in hand generated assembly helper.
+*/
+using System;
+
+#pragma warning disable 169
+struct MyStruct
+{
+ byte a, b, c;
+}
+#pragma warning restore 169
+
+class My
+{
+ static void foo<T>(T[,] s)
+ {
+ s[0, 1] = s[1, 0];
+ }
+
+ static int Main()
+ {
+ try
+ {
+ Object o1 = new Object();
+ Object o2 = new Object();
+ Object o3 = new Object();
+ Object o4 = new Object();
+
+ foo(new MyStruct[2, 2]); //corrupts registry
+
+ o1.ToString();
+ o2.ToString();
+ o3.ToString();
+ o4.ToString();
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Unexpected exception: " + e);
+ return 102;
+ }
+
+ Console.WriteLine("Pass");
+ return 100;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj
new file mode 100644
index 0000000000..a3f1248b6f
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev12_518401</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev12_518401.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test23.il b/tests/src/Loader/classloader/regressions/asurt150271/test23.il
new file mode 100644
index 0000000000..fe0d3fe23d
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/asurt150271/test23.il
@@ -0,0 +1,67 @@
+// 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.
+
+.assembly extern System.Console { }
+// non-blittable by objref field, large offset, large field size,
+// one field is a valuetype that has an objref member field
+// (this is to hit EEClass::CheckValueClassLayout())
+.assembly test23{}
+.assembly extern mscorlib{}
+
+.class public explicit sealed LargeClass extends [mscorlib]System.ValueType{
+ .field [0] public object o1
+ .size 0x200004
+}
+
+.class public explicit Class1 extends [mscorlib]System.Object{
+ .field [0] public int32 i1
+ .field [8] public object o1
+ .field [16] public int32 i2
+ .field [24] public valuetype LargeClass lc
+
+
+ .method public specialname rtspecialname void .ctor(){
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+}
+
+.method public static int32 Main(){
+ .entrypoint
+
+ .locals init(class Class1 c1)
+
+ newobj instance void Class1::.ctor()
+ stloc.0
+
+
+
+ ldstr "hello"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ ldloc.0
+ ldc.i4.1
+ stfld int32 Class1::i1
+
+
+ ldloc.0
+ ldc.i4.2
+ stfld int32 Class1::i2
+
+
+ ldstr "field i1: {0}, i2: {1}\n\nPASS"
+ ldloc.0
+ ldfld int32 Class1::i1
+ box int32
+ ldloc.0
+ ldfld int32 Class1::i2
+ box int32
+ call void [System.Console]System.Console::WriteLine(string,object,object)
+
+ ldc.i4 100
+ ret
+
+}
diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj b/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj
new file mode 100644
index 0000000000..7742c3e669
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test23</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test23.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test3.il b/tests/src/Loader/classloader/regressions/asurt150271/test3.il
new file mode 100644
index 0000000000..bacccfd1f4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/asurt150271/test3.il
@@ -0,0 +1,95 @@
+// 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.
+
+.assembly extern System.Console { }
+// blittable, absurdly large field offset, expect TypeLoadException
+.assembly test3{}
+.assembly extern mscorlib{}
+
+.class public explicit Class1 extends [mscorlib]System.Object{
+ .field [0] public int32 i1
+ .field [1073741824] public int32 i2 // offset: 1024*1024*1024
+
+ .method public specialname rtspecialname void .ctor(){
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+}
+
+
+.method public static int32 Main(){
+ .entrypoint
+
+ .locals init (class [mscorlib]System.Exception e2)
+
+ .try{
+ call void Go()
+ ldstr "FAIL: expected TypeLoadException, but no exception was caught"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave NOT_CAUGHT
+ }
+ catch [mscorlib]System.TypeLoadException{
+ pop // throw away the exception object
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave CAUGHT_EXPECTED
+ }
+ catch [mscorlib]System.Exception{
+ stloc e2
+ ldstr "FAIL: expected TypeLoadException, but instead caught the following:\n{0}"
+ ldloc e2
+ call void [System.Console]System.Console::WriteLine(string,object)
+ leave CAUGHT_UNEXPECTED
+ }
+
+ NOT_CAUGHT:
+ ldc.i4 101
+ br END
+
+ CAUGHT_EXPECTED:
+ ldc.i4 100
+ br END
+
+ CAUGHT_UNEXPECTED:
+ ldc.i4 102
+ br END
+
+ END:
+ ret
+}
+
+.method public static void Go(){
+ .locals init(class Class1 c1)
+
+ newobj instance void Class1::.ctor()
+ stloc.0
+
+
+
+ ldstr "hello"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ ldloc.0
+ ldc.i4.1
+ stfld int32 Class1::i1
+
+
+ ldloc.0
+ ldc.i4.2
+ stfld int32 Class1::i2
+
+
+ ldstr "field i1: {0}, i2: {1}\n\nPASS"
+ ldloc.0
+ ldfld int32 Class1::i1
+ box int32
+ ldloc.0
+ ldfld int32 Class1::i2
+ box int32
+ call void [System.Console]System.Console::WriteLine(string,object,object)
+
+ ret
+}
diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj b/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj
new file mode 100644
index 0000000000..c25f9935eb
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test3</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test3.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs b/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs
new file mode 100644
index 0000000000..d838c1dcf6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs
@@ -0,0 +1,58 @@
+// 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.
+
+using System;
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+
+namespace ConsoleApplication1
+{
+ class Program
+ {
+ public struct A
+ {
+ }
+
+ public struct B
+ {
+ A a;
+ }
+
+ public struct C
+ {
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
+ public B[] b;
+ }
+
+
+
+ static int Main(string[] args)
+ {
+ try
+ {
+ M();
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch(TypeLoadException)
+ {
+ Console.WriteLine("Caught TypeLoadException, FAIL");
+ return 99;
+ }
+ catch(Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception");
+ Console.WriteLine(e);
+ Console.WriteLine("\nFAIL");
+ return 99;
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static void M()
+ {
+ C obj = new C(); // exception occurs in the initializing this memeber
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj b/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj
new file mode 100644
index 0000000000..d00da98b01
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dd116295</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dd116295.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dd52/dd52.csproj b/tests/src/Loader/classloader/regressions/dd52/dd52.csproj
new file mode 100644
index 0000000000..6d83027253
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd52/dd52.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>dd52</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="runtest.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="test.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dd52/runtest.cs b/tests/src/Loader/classloader/regressions/dd52/runtest.cs
new file mode 100644
index 0000000000..a039a0c663
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd52/runtest.cs
@@ -0,0 +1,41 @@
+// 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.
+
+using System;
+
+public class Test
+
+{
+ public static int Main()
+ {
+ Console.WriteLine();
+
+
+ C28<int> obj405 = new C28<int>();
+
+
+ Console.WriteLine(obj405.M28());
+ Console.WriteLine(obj405.M3());
+ Console.WriteLine();
+
+
+ C28<int> obj433 = new C29();
+
+
+ Console.WriteLine(obj433.M28());
+
+ Console.WriteLine(obj433.M3());
+
+
+ C29 obj434 = new C29();
+
+
+ Console.WriteLine(obj434.M28());
+ Console.WriteLine(obj434.M3());
+ Console.WriteLine();
+ Console.WriteLine("PASS");
+
+ return 100;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dd52/test.il b/tests/src/Loader/classloader/regressions/dd52/test.il
new file mode 100644
index 0000000000..57a41c0ad3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd52/test.il
@@ -0,0 +1,70 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly test {}
+.assembly extern mscorlib {}
+
+
+
+.class public C27<T0,T1,T2>
+extends [mscorlib]System.Object
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+
+ .method public newslot virtual instance int32 M3()
+ {
+ ldc.i4 53
+ ret
+ }
+}
+
+.class public C28<T0>
+extends class C27<!T0,!T0,!T0>
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ ldarg.0
+ call instance void class C27<!T0,!T0,!T0>::.ctor()
+ ret
+ }
+ .method public newslot virtual instance int32 M28()
+ {
+ .override class C27<!T0,!T0,!T0>::M3
+ ldc.i4 54
+ ret
+ }
+ .method public virtual instance int32 M3()
+ {
+ ldc.i4 55
+ ret
+ }
+}
+
+.class public C29
+extends class C28<int32>
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ ldarg.0
+ call instance void class C28<int32>::.ctor()
+ ret
+ }
+ .method public virtual instance int32 M28()
+ {
+ .override class C28<int32>::M3
+ ldc.i4 56
+ ret
+ }
+
+}
+
diff --git a/tests/src/Loader/classloader/regressions/dd52/test.ilproj b/tests/src/Loader/classloader/regressions/dd52/test.ilproj
new file mode 100644
index 0000000000..125d8ee753
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dd52/test.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>test</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="test.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs
new file mode 100644
index 0000000000..d82ae605c6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs
@@ -0,0 +1,32 @@
+// 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.
+
+//Type load failed when compiling a class derived from a class that implicitly implements a generic method as a virtual method.
+//The base class and the interface are in a separate module
+//DDB186874: the output was:
+// "Unhandled Exception: System.TypeLoadException: Method 'MyBase.Print' on type 'MyDerived' from assembly 'Test,
+// Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' tried to implicitly implement an interface method with
+// weaker type parameter constraints."
+
+
+
+
+using System;
+
+
+public class MyDerived : MyBase, I
+{
+}
+
+class MyTest
+{
+ public static int Main()
+ {
+ I I1 = new MyDerived();
+
+ System.Console.WriteLine("I1.Print<object>: " + I1.Print<object>());
+
+ return 100;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj
new file mode 100644
index 0000000000..bd392490d3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>dev10_398410</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_398410.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="utility.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs b/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs
new file mode 100644
index 0000000000..9f8b19d4ad
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs
@@ -0,0 +1,13 @@
+// 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.
+
+public interface I
+{
+ string Print<T>();
+}
+
+public class MyBase
+{
+ public virtual string Print<T>() { return "MyBase.Print<" + typeof(T) + "> called"; }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj b/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj
new file mode 100644
index 0000000000..70eeda9122
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>utility</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="utility.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il
new file mode 100644
index 0000000000..912cc83024
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il
@@ -0,0 +1,223 @@
+// 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.
+
+.assembly extern System.Console { }
+//DDB187632: generic types and generic methods with more than 0xFFFF generic arguments should throw a TypeLoadException
+
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly extern genmeth
+{
+ .ver 0:0:0:0
+}
+.assembly extern gentype
+{
+ .ver 0:0:0:0
+}
+.assembly ddb187632
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module ddb187632.exe
+// MVID: {B6CD7E92-EDE7-4493-B78F-D3F743C68390}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x00900000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit Client
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig static void M1() cil managed noinlining
+ {
+ // Code size 62 (0x3e)
+ .maxstack 2
+ .locals init (class [genmeth]GenMeth V_0,
+ class [mscorlib]System.Type V_1,
+ class [mscorlib]System.Reflection.MethodInfo V_2,
+ class [mscorlib]System.Type[] V_3)
+ IL_0000: nop
+ IL_0001: newobj instance void [genmeth]GenMeth::.ctor()
+ IL_0006: stloc.0
+ IL_0007: ldloc.0
+ IL_0008: call valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::GetTypeHandle(object)
+ IL_000d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0012: stloc.1
+ IL_0013: ldloc.1
+ IL_0014: call void [System.Console]System.Console::WriteLine(object)
+ IL_0019: nop
+ IL_001a: ldloc.1
+ IL_001b: ldstr "foo"
+ IL_0020: callvirt instance class [mscorlib]System.Reflection.MethodInfo [mscorlib]System.Type::GetMethod(string)
+ IL_0025: stloc.2
+ IL_0026: ldloc.2
+ IL_0027: call void [System.Console]System.Console::WriteLine(object)
+ IL_002c: nop
+ IL_002d: ldloc.2
+ IL_002e: callvirt instance class [mscorlib]System.Type[] [mscorlib]System.Reflection.MethodBase::GetGenericArguments()
+ IL_0033: stloc.3
+ IL_0034: ldloc.3
+ IL_0035: ldlen
+ IL_0036: conv.i4
+ IL_0037: call void [System.Console]System.Console::WriteLine(int32)
+ IL_003c: nop
+ IL_003d: ret
+ } // end of method Client::M1
+
+ .method public hidebysig static void M2() cil managed noinlining
+ {
+ // Code size 36 (0x24)
+ .maxstack 1
+ .locals init (class [mscorlib]System.Type V_0,
+ class [mscorlib]System.Type[] V_1)
+ IL_1000: nop
+ IL_0000: ldtoken [gentype]GenType`1
+ IL_0005: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_000b: stloc.0
+ IL_000c: ldloc.0
+ IL_000d: call void [System.Console]System.Console::WriteLine(object)
+ IL_0012: nop
+ IL_0013: ldloc.0
+ IL_0014: callvirt instance class [mscorlib]System.Type[] [mscorlib]System.Type::GetGenericArguments()
+ IL_0019: stloc.1
+ IL_001a: ldloc.1
+ IL_001b: ldlen
+ IL_001c: conv.i4
+ IL_001d: call void [System.Console]System.Console::WriteLine(int32)
+ IL_0022: nop
+ IL_0023: ret
+ } // end of method Client::M2
+
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ // Code size 155 (0x9b)
+ .maxstack 2
+ .locals init (class [mscorlib]System.TypeLoadException V_0,
+ class [mscorlib]System.Exception V_1,
+ int32 V_2)
+ IL_0000: nop
+ .try
+ {
+ IL_0001: nop
+ IL_0002: ldstr "Testing huge generic methods..."
+ IL_0007: call void [System.Console]System.Console::WriteLine(string)
+ IL_000c: nop
+ IL_000d: call void Client::M1()
+ IL_0012: nop
+ IL_0013: ldstr "Failed: did not catch any TypeLoadException!!"
+ IL_0018: call void [System.Console]System.Console::WriteLine(string)
+ IL_001d: nop
+ IL_001e: ldc.i4.m1
+ IL_001f: stloc.2
+ IL_0020: leave.s IL_0098
+
+ } // end .try
+ catch [mscorlib]System.TypeLoadException
+ {
+ IL_0022: stloc.0
+ IL_0023: nop
+ IL_0024: ldstr "Pass!"
+ IL_0029: call void [System.Console]System.Console::WriteLine(string)
+ IL_002e: nop
+ IL_002f: nop
+ IL_0030: leave.s IL_0049
+
+ } // end handler
+ catch [mscorlib]System.Exception
+ {
+ IL_0032: stloc.1
+ IL_0033: nop
+ IL_0034: ldstr "Failed: caught unexpected exception: "
+ IL_0039: ldloc.1
+ IL_003a: call string [mscorlib]System.String::Concat(object,
+ object)
+ IL_003f: call void [System.Console]System.Console::WriteLine(string)
+ IL_0044: nop
+ IL_0045: ldc.i4.1
+ IL_0046: stloc.2
+ IL_0047: leave.s IL_0098
+
+ } // end handler
+ IL_0049: nop
+ .try
+ {
+ IL_004a: nop
+ IL_004b: ldstr "Testing huge generic types..."
+ IL_0050: call void [System.Console]System.Console::WriteLine(string)
+ IL_0055: nop
+ IL_0056: call void Client::M2()
+ IL_005b: nop
+ IL_005c: ldstr "Failed: did not catch any TypeLoadException!!"
+ IL_0061: call void [System.Console]System.Console::WriteLine(string)
+ IL_0066: nop
+ IL_0067: ldc.i4.m1
+ IL_0068: stloc.2
+ IL_0069: leave.s IL_0098
+
+ } // end .try
+ catch [mscorlib]System.TypeLoadException
+ {
+ IL_006b: stloc.0
+ IL_006c: nop
+ IL_006d: ldstr "Pass!"
+ IL_0072: call void [System.Console]System.Console::WriteLine(string)
+ IL_0077: nop
+ IL_0078: nop
+ IL_0079: leave.s IL_0092
+
+ } // end handler
+ catch [mscorlib]System.Exception
+ {
+ IL_007b: stloc.1
+ IL_007c: nop
+ IL_007d: ldstr "Failed: caught unexpected exception: "
+ IL_0082: ldloc.1
+ IL_0083: call string [mscorlib]System.String::Concat(object,
+ object)
+ IL_0088: call void [System.Console]System.Console::WriteLine(string)
+ IL_008d: nop
+ IL_008e: ldc.i4.1
+ IL_008f: stloc.2
+ IL_0090: leave.s IL_0098
+
+ } // end handler
+ IL_0092: nop
+ IL_0093: ldc.i4.s 100
+ IL_0095: stloc.2
+ IL_0096: br.s IL_0098
+
+ IL_0098: nop
+ IL_0099: ldloc.2
+ IL_009a: ret
+ } // end of method Client::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Client::.ctor
+
+} // end of class Client
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj
new file mode 100644
index 0000000000..4687451c76
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj
@@ -0,0 +1,40 @@
+<?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>
+ <AssemblyName>dev10_403582</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_403582.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="genmeth.ilproj" />
+ <ProjectReference Include="gentype.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il
new file mode 100644
index 0000000000..8d89da221d
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il
@@ -0,0 +1,64 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.30124.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.30124
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly genmeth
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module genmeth.dll
+// MVID: {E2B7E271-6615-4283-B6F1-9370E5BF0911}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x006D0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit GenMeth
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig static void foo<T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T>() cil managed
+ {
+ // Code size 2 (0x2)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: ret
+ } // end of method GenMeth::foo
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method GenMeth::.ctor
+
+} // end of class GenMeth
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj
new file mode 100644
index 0000000000..a76fcff7a1
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>genmeth</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="genmeth.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il
new file mode 100644
index 0000000000..3f4ee0b7cd
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il
@@ -0,0 +1,65 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.30124.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v2.0.30124
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+.assembly gentype
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module gentype.dll
+// MVID: {B8CFF910-FD86-4983-A914-64910238704A}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x01860000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public auto ansi beforefieldinit GenType`1<T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T>
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig instance void
+ foo() cil managed
+ {
+ // Code size 2 (0x2)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: ret
+ } // end of method GenType`3::foo
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method GenType`3::.ctor
+
+} // end of class GenType`3
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj
new file mode 100644
index 0000000000..e0dde50160
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>gentype</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="gentype.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il
new file mode 100644
index 0000000000..eb47ce27d3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il
@@ -0,0 +1,123 @@
+// 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.
+
+.assembly extern System.Console { }
+//
+// Non-virtual call of System.Type.TypeHandle on result of ldtoken should not trigger typeof(XXX).TypeHandle optimization
+//
+
+/*
+
+using System;
+
+class My {
+
+static int Main() {
+ try {
+ typeof(My).TypeHandle.ToString(); // Change to call get_TypeHandle non-virtually
+ }
+ catch (Exception e) {
+ Console.WriteLine("PASSED");
+ return 100;
+ }
+ Console.WriteLine("FAILED");
+ return 1;
+}
+
+}
+
+*/
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30215.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.30215
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly bug443322
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module bug443322.exe
+// MVID: {EDF83A15-9E74-47F0-B94B-197894607E38}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x004D0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class private auto ansi beforefieldinit My
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Main() cil managed
+ {
+ .entrypoint
+ // Code size 62 (0x3e)
+ .maxstack 1
+ .locals init (int32 V_0,
+ valuetype [mscorlib]System.RuntimeTypeHandle V_1)
+ .try
+ {
+ IL_0000: ldtoken My
+ IL_0005: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+// IL_000a: callvirt instance valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::get_TypeHandle()
+ IL_000a: call instance valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::get_TypeHandle()
+ IL_000f: stloc.1
+ IL_0010: ldloca.s V_1
+ IL_0012: constrained. [mscorlib]System.RuntimeTypeHandle
+ IL_0018: callvirt instance string [mscorlib]System.Object::ToString()
+ IL_001d: pop
+ IL_001e: leave.s IL_0030
+
+ } // end .try
+ catch [mscorlib]System.Exception
+ {
+ IL_0020: pop
+ IL_0021: ldstr "PASSED"
+ IL_0026: call void [System.Console]System.Console::WriteLine(string)
+ IL_002b: ldc.i4.s 100
+ IL_002d: stloc.0
+ IL_002e: leave.s IL_003c
+
+ } // end handler
+ IL_0030: ldstr "FAILED"
+ IL_0035: call void [System.Console]System.Console::WriteLine(string)
+ IL_003a: ldc.i4.1
+ IL_003b: ret
+
+ IL_003c: ldloc.0
+ IL_003d: ret
+ } // end of method My::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method My::.ctor
+
+} // end of class My
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file bug443322.res
diff --git a/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj
new file mode 100644
index 0000000000..5c00f39721
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_443322</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_443322.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il
new file mode 100644
index 0000000000..0c6ba518d8
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il
@@ -0,0 +1,99 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30829.00
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.ret
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 0:0:0:0
+}
+.assembly AppCompatBug
+{
+ .ver 0:0:0:0
+}
+.module AppCompatBug.exe
+// MVID: {EAE2209C-4B54-47C6-96C2-EC2352FC6386}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x00320000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class private auto ansi beforefieldinit CustomMemStream
+ extends [mscorlib]System.IO.MemoryStream
+{
+ .method public hidebysig virtual instance void
+ Close() cil managed
+ {
+ .override [mscorlib]System.IO.MemoryStream::Close
+ // Code size 20 (0x14)
+ .maxstack 8
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: call instance void [mscorlib]System.IO.Stream::Close()
+ IL_0007: nop
+ IL_0008: ldstr "Successfully called CustomStream.Close()"
+ IL_000d: call void [System.Console]System.Console::WriteLine(string)
+ IL_0012: nop
+ IL_0013: ret
+ } // end of method CustomMemStream::Close
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.IO.MemoryStream::.ctor()
+ IL_0006: ret
+ } // end of method CustomMemStream::.ctor
+
+} // end of class CustomMemStream
+
+.class private auto ansi beforefieldinit Program
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32 Main(string[] args) cil managed
+ {
+ .entrypoint
+ // Code size 15 (0xf)
+ .maxstack 1
+ .locals init (class [mscorlib]System.IO.MemoryStream V_0)
+ IL_0000: nop
+ IL_0001: newobj instance void CustomMemStream::.ctor()
+ IL_0006: stloc.0
+ IL_0007: ldloc.0
+ IL_0008: callvirt instance void [mscorlib]System.IO.Stream::Close()
+ IL_000d: nop
+ ldc.i4 100
+ IL_000e: ret
+ } // end of method Program::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Program::.ctor
+
+} // end of class Program
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj
new file mode 100644
index 0000000000..23a3a4947e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_493135</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_493135.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs
new file mode 100644
index 0000000000..33d60b80b3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs
@@ -0,0 +1,36 @@
+// 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.
+
+//This pattern of interface implementation caused a buffer overflow and caused an AV (see bug DEV10_526434)
+
+using System;
+
+class HelloWorld
+{
+ static int Main(String[] args)
+ {
+ C<object> c = new C<object>();
+
+ Console.WriteLine("Pass");
+ return 100;
+ }
+}
+
+interface K<T> { void Print(); }
+class C<T> : J<string, T>, K<T>
+{
+ public virtual void Print() { }
+ public virtual void PrintJ() { }
+}
+
+interface I1<T> { void Print(); }
+interface I2<T> { void Print(); }
+interface I3<T> { void Print(); }
+interface I4<T> { void Print(); }
+interface I5<T> { void Print(); }
+interface I6<T> { void Print(); }
+interface J<T, U> : I1<T>, I2<T>, I3<T>, I4<T>, I5<T>, I6<T>
+{
+ void PrintJ();
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj
new file mode 100644
index 0000000000..86934d0390
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_526434</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_526434.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs
new file mode 100644
index 0000000000..46fdda235d
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs
@@ -0,0 +1,111 @@
+// 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.
+
+using System;
+
+interface I<S> { string Method(S param); string Method<M>(S param); }
+
+struct MyStruct : I<string>, I<object>
+{
+ public string Method(string param) { return "string"; }
+ public string Method(object param) { return "object"; }
+ public string Method<M>(string param) { return "GEN-string"; }
+ public string Method<M>(object param) { return "GEN-object"; }
+}
+
+class Conversion1<T, U> where U : I<T>, new()
+{
+ public string Caller1(T param)
+ {
+ U instance = new U();
+ return instance.Method(param);
+ }
+
+ public string Caller2(T param)
+ {
+ U instance = new U();
+ return instance.Method<object>(param);
+ }
+}
+
+class Conversion2<U> where U : I<string>, new()
+{
+ public string Caller1()
+ {
+ U instance = new U();
+ return instance.Method("mystring");
+ }
+
+ public string Caller2()
+ {
+ U instance = new U();
+ return instance.Method<object>("mystring");
+ }
+}
+
+class Test
+{
+ static string Caller1<T, U>(T param) where U : I<T>, new()
+ {
+ U instance = new U();
+ return instance.Method(param);
+ }
+
+ static string Caller2<T, U>(T param) where U : I<T>, new()
+ {
+ U instance = new U();
+ return instance.Method<object>(param);
+ }
+
+ static string Caller3<U>() where U : I<string>, new()
+ {
+ U instance = new U();
+ return instance.Method("mystring");
+ }
+
+ static string Caller4<U>() where U : I<string>, new()
+ {
+ U instance = new U();
+ return instance.Method<object>("mystring");
+ }
+
+ static int Main()
+ {
+ int numFailures = 0;
+
+ Conversion1<string, MyStruct> c1 = new Conversion1<string, MyStruct>();
+ Conversion2<MyStruct> c2 = new Conversion2<MyStruct>();
+
+ string res1 = Caller1<string, MyStruct>("mystring");
+ string res2 = Caller2<string, MyStruct>("mystring");
+ Console.WriteLine(res1);
+ Console.WriteLine(res2);
+ if(res1 != "string" && res2 != "GEN-string") numFailures++;
+
+
+
+ res1 = Caller3<MyStruct>();
+ res2 = Caller4<MyStruct>();
+ Console.WriteLine(res1);
+ Console.WriteLine(res2);
+ if(res1 != "string" && res2 != "GEN-string") numFailures++;
+
+
+
+ res1 = c1.Caller1("mystring");
+ res2 = c1.Caller2("mystring");
+ Console.WriteLine(res1);
+ Console.WriteLine(res2);
+ if(res1 != "string" && res2 != "GEN-string") numFailures++;
+
+
+ res1 = c2.Caller1();
+ res2 = c2.Caller2();
+ Console.WriteLine(res1);
+ Console.WriteLine(res2);
+ if(res1 != "string" && res2 != "GEN-string") numFailures++;
+
+ return ((numFailures == 0)?(100):(-1));
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj
new file mode 100644
index 0000000000..7cbb7c5f92
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>ConstrainedMethods</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="ConstrainedMethods.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il
new file mode 100644
index 0000000000..30e6b9c0a1
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il
@@ -0,0 +1,572 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20529.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.20529
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly StaticMethods
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module StaticMethods.exe
+// MVID: {D3FCE52A-664A-48CB-A101-57680CEB43F1}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x00400000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class private sequential ansi sealed beforefieldinit MyStruct`2<T,U>
+ extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+ .method public hidebysig static string
+ Method(!T param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "Method(T)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::Method
+
+ .method public hidebysig static string
+ Method(!U param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "Method(U)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::Method
+
+ .method public hidebysig static string
+ GenMethod<M>(!T param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "GenMethod<M>(T)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::GenMethod
+
+ .method public hidebysig static string
+ GenMethod<M>(!U param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "GenMethod<M>(U)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::GenMethod
+
+ .method public hidebysig instance string
+ GenInstMethod<M>(!T param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "GenInstMethod<M>(T)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::GenInstMethod
+
+ .method public hidebysig instance string
+ GenInstMethod<M>(!U param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "GenInstMethod<M>(U)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::GenInstMethod
+
+ .method public hidebysig instance string
+ VirtMethod(!T param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "VirtMethod(T)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::VirtMethod
+
+ .method public hidebysig instance string
+ VirtMethod(!U param) cil managed
+ {
+ // Code size 11 (0xb)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldstr "VirtMethod(U)"
+ IL_0006: stloc.0
+ IL_0007: br.s IL_0009
+
+ IL_0009: ldloc.0
+ IL_000a: ret
+ } // end of method MyStruct`2::VirtMethod
+
+} // end of class MyStruct`2
+
+.class private auto ansi beforefieldinit Caller`4<T,U,V,W>
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig instance string
+ CallMethodT(!U param) cil managed
+ {
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: call string valuetype MyStruct`2<!U,!V>::Method(!0)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method Caller`4::CallMethodT
+
+ .method public hidebysig instance string
+ CallMethodU(!V param) cil managed
+ {
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: call string valuetype MyStruct`2<!U,!V>::Method(!1)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method Caller`4::CallMethodU
+
+ .method public hidebysig instance string
+ CallGenMethodT(!U param) cil managed
+ {
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: call string valuetype MyStruct`2<!U,!V>::GenMethod<!3>(!0)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method Caller`4::CallGenMethodT
+
+ .method public hidebysig instance string
+ CallGenMethodU(!V param) cil managed
+ {
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: call string valuetype MyStruct`2<!U,!V>::GenMethod<!3>(!1)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method Caller`4::CallGenMethodU
+
+ .method public hidebysig instance string
+ CallGenInstMethodT(!U param) cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0,
+ valuetype MyStruct`2<!U,!V> V_1)
+ IL_0000: nop
+ IL_0001: ldloca.s V_1
+ IL_0003: initobj valuetype MyStruct`2<!U,!V>
+ IL_0009: ldloc.1
+ IL_000a: stloc.1
+ IL_000b: ldloca.s V_1
+ IL_000d: ldarg.1
+ IL_000e: call instance string valuetype MyStruct`2<!U,!V>::GenInstMethod<!3>(!0)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Caller`4::CallGenInstMethodT
+
+ .method public hidebysig instance string
+ CallGenInstMethodU(!V param) cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0,
+ valuetype MyStruct`2<!U,!V> V_1)
+ IL_0000: nop
+ IL_0001: ldloca.s V_1
+ IL_0003: initobj valuetype MyStruct`2<!U,!V>
+ IL_0009: ldloc.1
+ IL_000a: stloc.1
+ IL_000b: ldloca.s V_1
+ IL_000d: ldarg.1
+ IL_000e: call instance string valuetype MyStruct`2<!U,!V>::GenInstMethod<!3>(!1)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Caller`4::CallGenInstMethodU
+
+ .method public hidebysig virtual instance string
+ CallVirtMethodT(!U param) cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0,
+ valuetype MyStruct`2<!U,!V> V_1)
+ IL_0000: nop
+ IL_0001: ldloca.s V_1
+ IL_0003: initobj valuetype MyStruct`2<!U,!V>
+ IL_0009: ldloc.1
+ IL_000a: stloc.1
+ IL_000b: ldloca.s V_1
+ IL_000d: ldarg.1
+ IL_000e: call instance string valuetype MyStruct`2<!U,!V>::VirtMethod(!0)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Caller`4::CallVirtMethodT
+
+ .method public hidebysig virtual instance string
+ CallVirtMethodU(!V param) cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0,
+ valuetype MyStruct`2<!U,!V> V_1)
+ IL_0000: nop
+ IL_0001: ldloca.s V_1
+ IL_0003: initobj valuetype MyStruct`2<!U,!V>
+ IL_0009: ldloc.1
+ IL_000a: stloc.1
+ IL_000b: ldloca.s V_1
+ IL_000d: ldarg.1
+ IL_000e: call instance string valuetype MyStruct`2<!U,!V>::VirtMethod(!1)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Caller`4::CallVirtMethodU
+
+ .method public hidebysig instance string
+ CallParentMethod() cil managed
+ {
+ // Code size 29 (0x1d)
+ .maxstack 1
+ .locals init (string V_0,
+ valuetype MyStruct`2<!U,!V> V_1)
+ IL_0000: nop
+ IL_0001: ldloca.s V_1
+ IL_0003: initobj valuetype MyStruct`2<!U,!V>
+ IL_0009: ldloc.1
+ IL_000a: stloc.1
+ IL_000b: ldloca.s V_1
+ IL_000d: constrained. valuetype MyStruct`2<!U,!V>
+ IL_0013: callvirt instance string [mscorlib]System.Object::ToString()
+ IL_0018: stloc.0
+ IL_0019: br.s IL_001b
+
+ IL_001b: ldloc.0
+ IL_001c: ret
+ } // end of method Caller`4::CallParentMethod
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Caller`4::.ctor
+
+} // end of class Caller`4
+
+.class private auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Main() cil managed
+ {
+ .entrypoint
+ // Code size 375 (0x177)
+ .maxstack 2
+ .locals init (int32 V_0,
+ class Caller`4<valuetype MyStruct`2<string,object>,string,object,object> V_1,
+ string V_2,
+ string V_3,
+ int32 V_4,
+ bool V_5)
+ IL_0000: nop
+ IL_0001: ldc.i4.0
+ IL_0002: stloc.0
+ IL_0003: newobj instance void class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::.ctor()
+ IL_0008: stloc.1
+ IL_0009: ldloc.1
+ IL_000a: ldstr "mystring"
+ IL_000f: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallMethodT(!1)
+ IL_0014: stloc.2
+ IL_0015: ldloc.1
+ IL_0016: newobj instance void [mscorlib]System.Object::.ctor()
+ IL_001b: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallMethodU(!2)
+ IL_0020: stloc.3
+ IL_0021: ldloc.2
+ IL_0022: call void [System.Console]System.Console::WriteLine(string)
+ IL_0027: nop
+ IL_0028: ldloc.3
+ IL_0029: call void [System.Console]System.Console::WriteLine(string)
+ IL_002e: nop
+ IL_002f: ldloc.2
+ IL_0030: ldstr "Method(T)"
+ IL_0035: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_003a: brfalse.s IL_004c
+
+ IL_003c: ldloc.2
+ IL_003d: ldstr "Method(U)"
+ IL_0042: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0047: ldc.i4.0
+ IL_0048: ceq
+ IL_004a: br.s IL_004d
+
+ IL_004c: ldc.i4.1
+ IL_004d: stloc.s V_5
+ IL_004f: ldloc.s V_5
+ IL_0051: brtrue.s IL_0057
+
+ IL_0053: ldloc.0
+ IL_0054: ldc.i4.1
+ IL_0055: add
+ IL_0056: stloc.0
+ IL_0057: ldloc.1
+ IL_0058: ldstr "mystring"
+ IL_005d: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenMethodT(!1)
+ IL_0062: stloc.2
+ IL_0063: ldloc.1
+ IL_0064: newobj instance void [mscorlib]System.Object::.ctor()
+ IL_0069: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenMethodU(!2)
+ IL_006e: stloc.3
+ IL_006f: ldloc.2
+ IL_0070: call void [System.Console]System.Console::WriteLine(string)
+ IL_0075: nop
+ IL_0076: ldloc.3
+ IL_0077: call void [System.Console]System.Console::WriteLine(string)
+ IL_007c: nop
+ IL_007d: ldloc.2
+ IL_007e: ldstr "GenMethod<M>(T)"
+ IL_0083: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0088: brfalse.s IL_009a
+
+ IL_008a: ldloc.2
+ IL_008b: ldstr "GenMethod<M>(U)"
+ IL_0090: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0095: ldc.i4.0
+ IL_0096: ceq
+ IL_0098: br.s IL_009b
+
+ IL_009a: ldc.i4.1
+ IL_009b: stloc.s V_5
+ IL_009d: ldloc.s V_5
+ IL_009f: brtrue.s IL_00a5
+
+ IL_00a1: ldloc.0
+ IL_00a2: ldc.i4.1
+ IL_00a3: add
+ IL_00a4: stloc.0
+ IL_00a5: ldloc.1
+ IL_00a6: ldstr "mystring"
+ IL_00ab: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenInstMethodT(!1)
+ IL_00b0: stloc.2
+ IL_00b1: ldloc.1
+ IL_00b2: newobj instance void [mscorlib]System.Object::.ctor()
+ IL_00b7: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenInstMethodU(!2)
+ IL_00bc: stloc.3
+ IL_00bd: ldloc.2
+ IL_00be: call void [System.Console]System.Console::WriteLine(string)
+ IL_00c3: nop
+ IL_00c4: ldloc.3
+ IL_00c5: call void [System.Console]System.Console::WriteLine(string)
+ IL_00ca: nop
+ IL_00cb: ldloc.2
+ IL_00cc: ldstr "GenInstMethod<M>(T)"
+ IL_00d1: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_00d6: brfalse.s IL_00e8
+
+ IL_00d8: ldloc.2
+ IL_00d9: ldstr "GenInstMethod<M>(U)"
+ IL_00de: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_00e3: ldc.i4.0
+ IL_00e4: ceq
+ IL_00e6: br.s IL_00e9
+
+ IL_00e8: ldc.i4.1
+ IL_00e9: stloc.s V_5
+ IL_00eb: ldloc.s V_5
+ IL_00ed: brtrue.s IL_00f3
+
+ IL_00ef: ldloc.0
+ IL_00f0: ldc.i4.1
+ IL_00f1: add
+ IL_00f2: stloc.0
+ IL_00f3: ldloc.1
+ IL_00f4: ldstr "mystring"
+ IL_00f9: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallVirtMethodT(!1)
+ IL_00fe: stloc.2
+ IL_00ff: ldloc.1
+ IL_0100: newobj instance void [mscorlib]System.Object::.ctor()
+ IL_0105: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallVirtMethodU(!2)
+ IL_010a: stloc.3
+ IL_010b: ldloc.2
+ IL_010c: call void [System.Console]System.Console::WriteLine(string)
+ IL_0111: nop
+ IL_0112: ldloc.3
+ IL_0113: call void [System.Console]System.Console::WriteLine(string)
+ IL_0118: nop
+ IL_0119: ldloc.2
+ IL_011a: ldstr "VirtMethod(T)"
+ IL_011f: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0124: brfalse.s IL_0136
+
+ IL_0126: ldloc.2
+ IL_0127: ldstr "VirtMethod(U)"
+ IL_012c: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0131: ldc.i4.0
+ IL_0132: ceq
+ IL_0134: br.s IL_0137
+
+ IL_0136: ldc.i4.1
+ IL_0137: stloc.s V_5
+ IL_0139: ldloc.s V_5
+ IL_013b: brtrue.s IL_0141
+
+ IL_013d: ldloc.0
+ IL_013e: ldc.i4.1
+ IL_013f: add
+ IL_0140: stloc.0
+ IL_0141: ldloc.1
+ IL_0142: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallParentMethod()
+ IL_0147: stloc.2
+ IL_0148: ldloc.2
+ IL_0149: call void [System.Console]System.Console::WriteLine(string)
+ IL_014e: nop
+ IL_014f: ldloc.2
+ IL_0150: ldstr "MyStruct`2[System.String,System.Object]"
+ IL_0155: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_015a: ldc.i4.0
+ IL_015b: ceq
+ IL_015d: stloc.s V_5
+ IL_015f: ldloc.s V_5
+ IL_0161: brtrue.s IL_0167
+
+ IL_0163: ldloc.0
+ IL_0164: ldc.i4.1
+ IL_0165: add
+ IL_0166: stloc.0
+ IL_0167: ldloc.0
+ IL_0168: brfalse.s IL_016e
+
+ IL_016a: ldc.i4.s -2
+ IL_016c: br.s IL_0170
+
+ IL_016e: ldc.i4.s 100
+ IL_0170: stloc.s V_4
+ IL_0172: br.s IL_0174
+
+ IL_0174: ldloc.s V_4
+ IL_0176: ret
+ } // end of method Test::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Test::.ctor
+
+} // end of class Test
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file MethodCalls.res
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj
new file mode 100644
index 0000000000..f3d90178a4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>MethodCalls</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="MethodCalls.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il
new file mode 100644
index 0000000000..f49b2ed75c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il
@@ -0,0 +1,343 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20618.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.20618
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly RecursiveGen
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module RecursiveGen.exe
+// MVID: {CCE38E80-73AC-4FAC-A7CD-8B523BD6C64F}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x00870000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class interface private abstract auto ansi I`1<S>
+{
+ .method public hidebysig newslot abstract virtual
+ instance string Method() cil managed
+ {
+ } // end of method I`1::Method
+
+} // end of class I`1
+
+.class private sequential ansi sealed beforefieldinit MyStruct
+ extends [mscorlib]System.ValueType
+ implements class I`1<valuetype MyStruct>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method private hidebysig newslot virtual final
+ instance string 'I<MyStruct>.Method'() cil managed
+ {
+ .override method instance string class I`1<valuetype MyStruct>::Method()
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct::n
+ IL_000f: ldstr "I<MyStruct>.Method()"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct::'I<MyStruct>.Method'
+
+ .method private hidebysig newslot virtual final
+ instance string 'I<System.Object>.Method'() cil managed
+ {
+ .override method instance string class I`1<object>::Method()
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct::n
+ IL_000f: ldstr "I<object>.Method()"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct::'I<System.Object>.Method'
+
+} // end of class MyStruct
+
+.class private sequential ansi sealed beforefieldinit GenStruct`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<valuetype GenStruct`2<!T,!U>>,
+ class I`1<valuetype GenStruct`2<!U,!T>>
+{
+ .field public int32 n
+ .method private hidebysig newslot virtual final instance string 'I<GenStruct<T,U>>.Method'() cil managed
+ {
+ .override method instance string class I`1<valuetype GenStruct`2<!T,!U>>::Method()
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype GenStruct`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype GenStruct`2<!T,!U>::n
+ IL_000f: ldstr "I<GenStruct<T, U>>.Method()"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method GenStruct`2::'I<GenStruct<T,U>>.Method'
+
+ .method private hidebysig newslot virtual final instance string 'I<GenStruct<U,T>>.Method'() cil managed
+ {
+ .override method instance string class I`1<valuetype GenStruct`2<!U,!T>>::Method()
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype GenStruct`2<!U,!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype GenStruct`2<!U,!T>::n
+ IL_000f: ldstr "I<GenStruct<U, T>>.Method()"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method GenStruct`2::'I<GenStruct<T,U>>.Method'
+
+ } // end of class GenStruct`2
+
+.class private auto ansi beforefieldinit Conversion1`2<T,(class I`1<!T>) U>
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig instance string
+ Caller(!U& 'instance') cil managed
+ {
+ // Code size 18 (0x12)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: constrained. !U
+ IL_0008: callvirt instance string class I`1<!T>::Method()
+ IL_000d: stloc.0
+ IL_000e: br.s IL_0010
+
+ IL_0010: ldloc.0
+ IL_0011: ret
+ } // end of method Conversion1`2::Caller
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Conversion1`2::.ctor
+
+} // end of class Conversion1`2
+
+.class private auto ansi beforefieldinit Conversion2`3<T,U,(class I`1<valuetype GenStruct`2<!T,!U>>) V>
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig instance string
+ Caller(!V& 'instance') cil managed
+ {
+ // Code size 18 (0x12)
+ .maxstack 1
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: constrained. !V
+ IL_0008: callvirt instance string class I`1<valuetype GenStruct`2<!T,!U>>::Method()
+ IL_000d: stloc.0
+ IL_000e: br.s IL_0010
+
+ IL_0010: ldloc.0
+ IL_0011: ret
+ } // end of method Conversion2`3::Caller
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Conversion2`3::.ctor
+
+} // end of class Conversion2`3
+
+.class private auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Main() cil managed
+ {
+ .entrypoint
+ // Code size 206 (0xce)
+ .maxstack 2
+ .locals init (bool V_0,
+ valuetype MyStruct V_1,
+ class Conversion1`2<valuetype MyStruct,valuetype MyStruct> V_2,
+ string V_3,
+ valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>> V_4,
+ class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>> V_5,
+ int32 V_6,
+ bool V_7)
+ IL_0000: nop
+ IL_0001: ldc.i4.1
+ IL_0002: stloc.0
+ IL_0003: ldloca.s V_1
+ IL_0005: initobj MyStruct
+ IL_000b: newobj instance void class Conversion1`2<valuetype MyStruct,valuetype MyStruct>::.ctor()
+ IL_0010: stloc.2
+ IL_0011: ldloc.2
+ IL_0012: ldloca.s V_1
+ IL_0014: callvirt instance string class Conversion1`2<valuetype MyStruct,valuetype MyStruct>::Caller(!1&)
+ IL_0019: stloc.3
+ IL_001a: ldloc.3
+ IL_001b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0020: nop
+ IL_0021: ldloca.s V_1
+ IL_0023: ldfld int32 MyStruct::n
+ IL_0028: call void [System.Console]System.Console::WriteLine(int32)
+ IL_002d: nop
+ IL_002e: ldloc.3
+ IL_002f: ldstr "I<MyStruct>.Method()"
+ IL_0034: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0039: brtrue.s IL_0047
+
+ IL_003b: ldloca.s V_1
+ IL_003d: ldfld int32 MyStruct::n
+ IL_0042: ldc.i4.1
+ IL_0043: ceq
+ IL_0045: br.s IL_0048
+
+ IL_0047: ldc.i4.0
+ IL_0048: stloc.s V_7
+ IL_004a: ldloc.s V_7
+ IL_004c: brtrue.s IL_0050
+
+ IL_004e: ldc.i4.0
+ IL_004f: stloc.0
+ IL_0050: ldloca.s V_4
+ IL_0052: initobj valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>
+ IL_0058: newobj instance void class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>>::.ctor()
+ IL_005d: stloc.s V_5
+ IL_005f: ldloc.s V_5
+ IL_0061: ldloca.s V_4
+ IL_0063: callvirt instance string class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>>::Caller(!2&)
+ IL_0068: stloc.3
+ IL_0069: ldloc.3
+ IL_006a: call void [System.Console]System.Console::WriteLine(string)
+ IL_006f: nop
+ IL_0070: ldloca.s V_4
+ IL_0072: ldfld int32 valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>::n
+ IL_0077: call void [System.Console]System.Console::WriteLine(int32)
+ IL_007c: nop
+ IL_007d: ldloc.3
+ IL_007e: ldstr "I<GenStruct<T, U>>.Method()"
+ IL_0083: call bool [mscorlib]System.String::op_Inequality(string,
+ string)
+ IL_0088: brtrue.s IL_0096
+
+ IL_008a: ldloca.s V_4
+ IL_008c: ldfld int32 valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>::n
+ IL_0091: ldc.i4.1
+ IL_0092: ceq
+ IL_0094: br.s IL_0097
+
+ IL_0096: ldc.i4.0
+ IL_0097: stloc.s V_7
+ IL_0099: ldloc.s V_7
+ IL_009b: brtrue.s IL_009f
+
+ IL_009d: ldc.i4.0
+ IL_009e: stloc.0
+ IL_009f: ldloc.0
+ IL_00a0: ldc.i4.0
+ IL_00a1: ceq
+ IL_00a3: stloc.s V_7
+ IL_00a5: ldloc.s V_7
+ IL_00a7: brtrue.s IL_00bb
+
+ IL_00a9: nop
+ IL_00aa: ldstr "Pass"
+ IL_00af: call void [System.Console]System.Console::WriteLine(string)
+ IL_00b4: nop
+ IL_00b5: ldc.i4.s 100
+ IL_00b7: stloc.s V_6
+ IL_00b9: br.s IL_00cb
+
+ IL_00bb: ldstr "Fail"
+ IL_00c0: call void [System.Console]System.Console::WriteLine(string)
+ IL_00c5: nop
+ IL_00c6: ldc.i4.m1
+ IL_00c7: stloc.s V_6
+ IL_00c9: br.s IL_00cb
+
+ IL_00cb: ldloc.s V_6
+ IL_00cd: ret
+ } // end of method Test::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Test::.ctor
+
+} // end of class Test
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file RecursiveGen.res
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj
new file mode 100644
index 0000000000..dcf6f17463
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>RecursiveGen</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="RecursiveGen.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il
new file mode 100644
index 0000000000..e29fad902f
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il
@@ -0,0 +1,1264 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.20528
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly SealedTypes
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module SealedTypes.exe
+// MVID: {926F9C9D-6690-45EB-B4DA-12725C405BC3}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x016D0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class interface public abstract auto ansi I`1<S>
+{
+ .method public hidebysig newslot abstract virtual
+ instance string Print(!S 'value') cil managed
+ {
+ } // end of method I`1::Print
+
+} // end of class I`1
+
+.class public auto ansi sealed beforefieldinit MyStruct1
+ extends [mscorlib]System.Object
+ implements class I`1<string>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct1::.ctor
+
+} // end of class MyStruct1
+
+.class public auto ansi sealed beforefieldinit MyStruct2
+ extends [mscorlib]System.Object
+ implements class I`1<object>,
+ class I`1<string>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct2::.ctor
+
+} // end of class MyStruct2
+
+.class public auto ansi sealed beforefieldinit MyStruct3`2<T,U>
+ extends [mscorlib]System.Object
+ implements class I`1<string>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct3`2::.ctor
+
+} // end of class MyStruct3`2
+
+.class public auto ansi sealed beforefieldinit MyStruct4`2<T,U>
+ extends [mscorlib]System.Object
+ implements class I`1<object>,
+ class I`1<string>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct4`2::.ctor
+
+} // end of class MyStruct4`2
+
+.class public auto ansi sealed beforefieldinit MyStruct5`1<T>
+ extends [mscorlib]System.Object
+ implements class I`1<string>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct5`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct5`1::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct5`1::.ctor
+
+} // end of class MyStruct5`1
+
+.class public auto ansi sealed beforefieldinit MyStruct6`1<T>
+ extends [mscorlib]System.Object
+ implements class I`1<!T>,
+ class I`1<string>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(string 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print(string)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct6`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct6`1::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct6`1::.ctor
+
+} // end of class MyStruct6`1
+
+.class public auto ansi sealed beforefieldinit MyStruct7`1<T>
+ extends [mscorlib]System.Object
+ implements class I`1<object>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct7`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct7`1<!T>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct7`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct7`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct7`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct7`1::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct7`1::.ctor
+
+} // end of class MyStruct7`1
+
+.class public auto ansi sealed beforefieldinit MyStruct8`1<T>
+ extends [mscorlib]System.Object
+ implements class I`1<!T>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct8`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct8`1<!T>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct8`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct8`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct8`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct8`1::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct8`1::.ctor
+
+} // end of class MyStruct8`1
+
+.class public auto ansi sealed beforefieldinit MyStruct9`2<T,U>
+ extends [mscorlib]System.Object
+ implements class I`1<!T>,
+ class I`1<!U>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct9`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct9`2<!T,!U>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct9`2::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct9`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct9`2<!T,!U>::n
+ IL_000f: ldstr "Print_U("
+ IL_0014: ldtoken !U
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct9`2::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct9`2::.ctor
+
+} // end of class MyStruct9`2
+
+.class public auto ansi sealed beforefieldinit MyStruct10`2<T,U>
+ extends [mscorlib]System.Object
+ implements class I`1<!U>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct10`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct10`2<!T,!U>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct10`2::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 class MyStruct10`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 class MyStruct10`2<!T,!U>::n
+ IL_000f: ldstr "Print_U("
+ IL_0014: ldtoken !U
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct10`2::Print
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method MyStruct10`2::.ctor
+
+} // end of class MyStruct10`2
+
+.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TString>) TMyStruct,TString>
+ extends [mscorlib]System.Object
+{
+ .field public !TString 'value'
+ .method public hidebysig instance string
+ Caller1() cil managed
+ {
+ // Code size 58 (0x3a)
+ .maxstack 2
+ .locals init (!TMyStruct V_0,
+ string V_1,
+ !TMyStruct V_2)
+ IL_0000: nop
+ IL_0001: ldloca.s V_2
+ IL_0003: initobj !TMyStruct
+ IL_0009: ldloc.2
+ IL_000a: box !TMyStruct
+ IL_000f: brfalse.s IL_001c
+
+ IL_0011: ldloca.s V_2
+ IL_0013: initobj !TMyStruct
+ IL_0019: ldloc.2
+ IL_001a: br.s IL_0021
+
+ IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>()
+ IL_0021: stloc.0
+ IL_0022: ldloca.s V_0
+ IL_0024: ldarg.0
+ IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TString>::'value'
+ IL_002a: constrained. !TMyStruct
+ IL_0030: callvirt instance string class I`1<!TString>::Print(!0)
+ IL_0035: stloc.1
+ IL_0036: br.s IL_0038
+
+ IL_0038: ldloc.1
+ IL_0039: ret
+ } // end of method Conversion`2::Caller1
+
+ .method public hidebysig instance string
+ Caller2(!TMyStruct& 'instance') cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.0
+ IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TString>::'value'
+ IL_0008: constrained. !TMyStruct
+ IL_000e: callvirt instance string class I`1<!TString>::Print(!0)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Conversion`2::Caller2
+
+ .method public hidebysig instance string
+ Caller3(!TMyStruct& 'instance',
+ !TString param) cil managed
+ {
+ // Code size 19 (0x13)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.2
+ IL_0003: constrained. !TMyStruct
+ IL_0009: callvirt instance string class I`1<!TString>::Print(!0)
+ IL_000e: stloc.0
+ IL_000f: br.s IL_0011
+
+ IL_0011: ldloc.0
+ IL_0012: ret
+ } // end of method Conversion`2::Caller3
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Conversion`2::.ctor
+
+} // end of class Conversion`2
+
+.class private auto ansi beforefieldinit Program
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Verification(string res1,
+ string res2,
+ string res3,
+ string expected,
+ int32 n) cil managed
+ {
+ // Code size 150 (0x96)
+ .maxstack 2
+ .locals init (int32 V_0,
+ bool V_1)
+ IL_0000: nop
+ IL_0001: ldstr " "
+ IL_0006: ldarg.0
+ IL_0007: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_000c: call void [System.Console]System.Console::WriteLine(string)
+ IL_0011: nop
+ IL_0012: ldstr " "
+ IL_0017: ldarg.1
+ IL_0018: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_001d: call void [System.Console]System.Console::WriteLine(string)
+ IL_0022: nop
+ IL_0023: ldstr " "
+ IL_0028: ldarg.2
+ IL_0029: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_002e: call void [System.Console]System.Console::WriteLine(string)
+ IL_0033: nop
+ IL_0034: ldstr " "
+ IL_0039: ldarg.s n
+ IL_003b: box [mscorlib]System.Int32
+ IL_0040: call string [mscorlib]System.String::Concat(object,
+ object)
+ IL_0045: call void [System.Console]System.Console::WriteLine(string)
+ IL_004a: nop
+ IL_004b: ldarg.0
+ IL_004c: ldarg.3
+ IL_004d: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0052: brfalse.s IL_0070
+
+ IL_0054: ldarg.1
+ IL_0055: ldarg.3
+ IL_0056: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_005b: brfalse.s IL_0070
+
+ IL_005d: ldarg.2
+ IL_005e: ldarg.3
+ IL_005f: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0064: brfalse.s IL_0070
+
+ IL_0066: ldarg.s n
+ IL_0068: ldc.i4.2
+ IL_0069: ceq
+ IL_006b: ldc.i4.0
+ IL_006c: ceq
+ IL_006e: br.s IL_0071
+
+ IL_0070: ldc.i4.1
+ IL_0071: stloc.1
+ IL_0072: ldloc.1
+ IL_0073: brtrue.s IL_0085
+
+ IL_0075: nop
+ IL_0076: ldstr "PASS\n"
+ IL_007b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0080: nop
+ IL_0081: ldc.i4.0
+ IL_0082: stloc.0
+ IL_0083: br.s IL_0094
+
+ IL_0085: ldstr "FAIL\n"
+ IL_008a: call void [System.Console]System.Console::WriteLine(string)
+ IL_008f: nop
+ IL_0090: ldc.i4.1
+ IL_0091: stloc.0
+ IL_0092: br.s IL_0094
+
+ IL_0094: ldloc.0
+ IL_0095: ret
+ } // end of method Program::Verification
+
+ .method private hidebysig static int32
+ Main(string[] args) cil managed
+ {
+ .entrypoint
+ // Code size 882 (0x372)
+ .maxstack 6
+ .locals init (int32 V_0,
+ class MyStruct1 V_1,
+ class MyStruct2 V_2,
+ class MyStruct3`2<object,object> V_3,
+ class MyStruct4`2<object,object> V_4,
+ class MyStruct5`1<object> V_5,
+ class MyStruct6`1<object> V_6,
+ class MyStruct7`1<string> V_7,
+ class MyStruct8`1<string> V_8,
+ class MyStruct9`2<string,object> V_9,
+ class MyStruct10`2<string,object> V_10,
+ class Conversion`2<class MyStruct1,string> V_11,
+ class Conversion`2<class MyStruct2,string> V_12,
+ class Conversion`2<class MyStruct3`2<object,object>,string> V_13,
+ class Conversion`2<class MyStruct4`2<object,object>,string> V_14,
+ class Conversion`2<class MyStruct5`1<object>,string> V_15,
+ class Conversion`2<class MyStruct6`1<object>,string> V_16,
+ class Conversion`2<class MyStruct7`1<string>,string> V_17,
+ class Conversion`2<class MyStruct8`1<string>,string> V_18,
+ class Conversion`2<class MyStruct9`2<string,object>,string> V_19,
+ class Conversion`2<class MyStruct10`2<string,object>,string> V_20,
+ string V_21,
+ string V_22,
+ string V_23,
+ int32 V_24)
+ IL_0000: nop
+ IL_0001: ldc.i4.0
+ IL_0002: stloc.0
+ IL_0003: newobj instance void MyStruct1::.ctor()
+ IL_0008: stloc.1
+ IL_0009: newobj instance void MyStruct2::.ctor()
+ IL_000e: stloc.2
+ IL_000f: newobj instance void class MyStruct3`2<object,object>::.ctor()
+ IL_0014: stloc.3
+ IL_0015: newobj instance void class MyStruct4`2<object,object>::.ctor()
+ IL_001a: stloc.s V_4
+ IL_001c: newobj instance void class MyStruct5`1<object>::.ctor()
+ IL_0021: stloc.s V_5
+ IL_0023: newobj instance void class MyStruct6`1<object>::.ctor()
+ IL_0028: stloc.s V_6
+ IL_002a: newobj instance void class MyStruct7`1<string>::.ctor()
+ IL_002f: stloc.s V_7
+ IL_0031: newobj instance void class MyStruct8`1<string>::.ctor()
+ IL_0036: stloc.s V_8
+ IL_0038: newobj instance void class MyStruct9`2<string,object>::.ctor()
+ IL_003d: stloc.s V_9
+ IL_003f: newobj instance void class MyStruct10`2<string,object>::.ctor()
+ IL_0044: stloc.s V_10
+ IL_0046: newobj instance void class Conversion`2<class MyStruct1,string>::.ctor()
+ IL_004b: stloc.s V_11
+ IL_004d: newobj instance void class Conversion`2<class MyStruct2,string>::.ctor()
+ IL_0052: stloc.s V_12
+ IL_0054: newobj instance void class Conversion`2<class MyStruct3`2<object,object>,string>::.ctor()
+ IL_0059: stloc.s V_13
+ IL_005b: newobj instance void class Conversion`2<class MyStruct4`2<object,object>,string>::.ctor()
+ IL_0060: stloc.s V_14
+ IL_0062: newobj instance void class Conversion`2<class MyStruct5`1<object>,string>::.ctor()
+ IL_0067: stloc.s V_15
+ IL_0069: newobj instance void class Conversion`2<class MyStruct6`1<object>,string>::.ctor()
+ IL_006e: stloc.s V_16
+ IL_0070: newobj instance void class Conversion`2<class MyStruct7`1<string>,string>::.ctor()
+ IL_0075: stloc.s V_17
+ IL_0077: newobj instance void class Conversion`2<class MyStruct8`1<string>,string>::.ctor()
+ IL_007c: stloc.s V_18
+ IL_007e: newobj instance void class Conversion`2<class MyStruct9`2<string,object>,string>::.ctor()
+ IL_0083: stloc.s V_19
+ IL_0085: newobj instance void class Conversion`2<class MyStruct10`2<string,object>,string>::.ctor()
+ IL_008a: stloc.s V_20
+ IL_008c: ldstr "TEST1:"
+ IL_0091: call void [System.Console]System.Console::WriteLine(string)
+ IL_0096: nop
+ IL_0097: ldloc.s V_11
+ IL_0099: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller1()
+ IL_009e: stloc.s V_21
+ IL_00a0: ldloc.s V_11
+ IL_00a2: ldloca.s V_1
+ IL_00a4: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller2(!0&)
+ IL_00a9: stloc.s V_22
+ IL_00ab: ldloc.s V_11
+ IL_00ad: ldloca.s V_1
+ IL_00af: ldstr "mystring"
+ IL_00b4: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller3(!0&,
+ !1)
+ IL_00b9: stloc.s V_23
+ IL_00bb: ldloc.0
+ IL_00bc: ldloc.s V_21
+ IL_00be: ldloc.s V_22
+ IL_00c0: ldloc.s V_23
+ IL_00c2: ldstr "Print(string)"
+ IL_00c7: ldloc.1
+ IL_00c8: ldfld int32 MyStruct1::n
+ IL_00cd: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_00d2: add
+ IL_00d3: stloc.0
+ IL_00d4: ldstr "TEST2:"
+ IL_00d9: call void [System.Console]System.Console::WriteLine(string)
+ IL_00de: nop
+ IL_00df: ldloc.s V_12
+ IL_00e1: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller1()
+ IL_00e6: stloc.s V_21
+ IL_00e8: ldloc.s V_12
+ IL_00ea: ldloca.s V_2
+ IL_00ec: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller2(!0&)
+ IL_00f1: stloc.s V_22
+ IL_00f3: ldloc.s V_12
+ IL_00f5: ldloca.s V_2
+ IL_00f7: ldstr "mystring"
+ IL_00fc: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller3(!0&,
+ !1)
+ IL_0101: stloc.s V_23
+ IL_0103: ldloc.0
+ IL_0104: ldloc.s V_21
+ IL_0106: ldloc.s V_22
+ IL_0108: ldloc.s V_23
+ IL_010a: ldstr "Print(string)"
+ IL_010f: ldloc.2
+ IL_0110: ldfld int32 MyStruct2::n
+ IL_0115: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_011a: add
+ IL_011b: stloc.0
+ IL_011c: ldstr "TEST3:"
+ IL_0121: call void [System.Console]System.Console::WriteLine(string)
+ IL_0126: nop
+ IL_0127: ldloc.s V_13
+ IL_0129: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller1()
+ IL_012e: stloc.s V_21
+ IL_0130: ldloc.s V_13
+ IL_0132: ldloca.s V_3
+ IL_0134: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller2(!0&)
+ IL_0139: stloc.s V_22
+ IL_013b: ldloc.s V_13
+ IL_013d: ldloca.s V_3
+ IL_013f: ldstr "mystring"
+ IL_0144: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller3(!0&,
+ !1)
+ IL_0149: stloc.s V_23
+ IL_014b: ldloc.0
+ IL_014c: ldloc.s V_21
+ IL_014e: ldloc.s V_22
+ IL_0150: ldloc.s V_23
+ IL_0152: ldstr "Print(string)"
+ IL_0157: ldloc.3
+ IL_0158: ldfld int32 class MyStruct3`2<object,object>::n
+ IL_015d: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0162: add
+ IL_0163: stloc.0
+ IL_0164: ldstr "TEST4:"
+ IL_0169: call void [System.Console]System.Console::WriteLine(string)
+ IL_016e: nop
+ IL_016f: ldloc.s V_14
+ IL_0171: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller1()
+ IL_0176: stloc.s V_21
+ IL_0178: ldloc.s V_14
+ IL_017a: ldloca.s V_4
+ IL_017c: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller2(!0&)
+ IL_0181: stloc.s V_22
+ IL_0183: ldloc.s V_14
+ IL_0185: ldloca.s V_4
+ IL_0187: ldstr "mystring"
+ IL_018c: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller3(!0&,
+ !1)
+ IL_0191: stloc.s V_23
+ IL_0193: ldloc.0
+ IL_0194: ldloc.s V_21
+ IL_0196: ldloc.s V_22
+ IL_0198: ldloc.s V_23
+ IL_019a: ldstr "Print(string)"
+ IL_019f: ldloc.s V_4
+ IL_01a1: ldfld int32 class MyStruct4`2<object,object>::n
+ IL_01a6: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_01ab: add
+ IL_01ac: stloc.0
+ IL_01ad: ldstr "TEST5:"
+ IL_01b2: call void [System.Console]System.Console::WriteLine(string)
+ IL_01b7: nop
+ IL_01b8: ldloc.s V_15
+ IL_01ba: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller1()
+ IL_01bf: stloc.s V_21
+ IL_01c1: ldloc.s V_15
+ IL_01c3: ldloca.s V_5
+ IL_01c5: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller2(!0&)
+ IL_01ca: stloc.s V_22
+ IL_01cc: ldloc.s V_15
+ IL_01ce: ldloca.s V_5
+ IL_01d0: ldstr "mystring"
+ IL_01d5: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller3(!0&,
+ !1)
+ IL_01da: stloc.s V_23
+ IL_01dc: ldloc.0
+ IL_01dd: ldloc.s V_21
+ IL_01df: ldloc.s V_22
+ IL_01e1: ldloc.s V_23
+ IL_01e3: ldstr "Print(string)"
+ IL_01e8: ldloc.s V_5
+ IL_01ea: ldfld int32 class MyStruct5`1<object>::n
+ IL_01ef: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_01f4: add
+ IL_01f5: stloc.0
+ IL_01f6: ldstr "TEST6:"
+ IL_01fb: call void [System.Console]System.Console::WriteLine(string)
+ IL_0200: nop
+ IL_0201: ldloc.s V_16
+ IL_0203: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller1()
+ IL_0208: stloc.s V_21
+ IL_020a: ldloc.s V_16
+ IL_020c: ldloca.s V_6
+ IL_020e: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller2(!0&)
+ IL_0213: stloc.s V_22
+ IL_0215: ldloc.s V_16
+ IL_0217: ldloca.s V_6
+ IL_0219: ldstr "mystring"
+ IL_021e: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller3(!0&,
+ !1)
+ IL_0223: stloc.s V_23
+ IL_0225: ldloc.0
+ IL_0226: ldloc.s V_21
+ IL_0228: ldloc.s V_22
+ IL_022a: ldloc.s V_23
+ IL_022c: ldstr "Print(string)"
+ IL_0231: ldloc.s V_6
+ IL_0233: ldfld int32 class MyStruct6`1<object>::n
+ IL_0238: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_023d: add
+ IL_023e: stloc.0
+ IL_023f: ldstr "TEST7:"
+ IL_0244: call void [System.Console]System.Console::WriteLine(string)
+ IL_0249: nop
+ IL_024a: ldloc.s V_17
+ IL_024c: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller1()
+ IL_0251: stloc.s V_21
+ IL_0253: ldloc.s V_17
+ IL_0255: ldloca.s V_7
+ IL_0257: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller2(!0&)
+ IL_025c: stloc.s V_22
+ IL_025e: ldloc.s V_17
+ IL_0260: ldloca.s V_7
+ IL_0262: ldstr "mystring"
+ IL_0267: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller3(!0&,
+ !1)
+ IL_026c: stloc.s V_23
+ IL_026e: ldloc.0
+ IL_026f: ldloc.s V_21
+ IL_0271: ldloc.s V_22
+ IL_0273: ldloc.s V_23
+ IL_0275: ldstr "Print_T(System.String)"
+ IL_027a: ldloc.s V_7
+ IL_027c: ldfld int32 class MyStruct7`1<string>::n
+ IL_0281: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0286: add
+ IL_0287: stloc.0
+ IL_0288: ldstr "TEST8:"
+ IL_028d: call void [System.Console]System.Console::WriteLine(string)
+ IL_0292: nop
+ IL_0293: ldloc.s V_18
+ IL_0295: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller1()
+ IL_029a: stloc.s V_21
+ IL_029c: ldloc.s V_18
+ IL_029e: ldloca.s V_8
+ IL_02a0: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller2(!0&)
+ IL_02a5: stloc.s V_22
+ IL_02a7: ldloc.s V_18
+ IL_02a9: ldloca.s V_8
+ IL_02ab: ldstr "mystring"
+ IL_02b0: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller3(!0&,
+ !1)
+ IL_02b5: stloc.s V_23
+ IL_02b7: ldloc.0
+ IL_02b8: ldloc.s V_21
+ IL_02ba: ldloc.s V_22
+ IL_02bc: ldloc.s V_23
+ IL_02be: ldstr "Print_T(System.String)"
+ IL_02c3: ldloc.s V_8
+ IL_02c5: ldfld int32 class MyStruct8`1<string>::n
+ IL_02ca: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_02cf: add
+ IL_02d0: stloc.0
+ IL_02d1: ldstr "TEST9:"
+ IL_02d6: call void [System.Console]System.Console::WriteLine(string)
+ IL_02db: nop
+ IL_02dc: ldloc.s V_19
+ IL_02de: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller1()
+ IL_02e3: stloc.s V_21
+ IL_02e5: ldloc.s V_19
+ IL_02e7: ldloca.s V_9
+ IL_02e9: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller2(!0&)
+ IL_02ee: stloc.s V_22
+ IL_02f0: ldloc.s V_19
+ IL_02f2: ldloca.s V_9
+ IL_02f4: ldstr "mystring"
+ IL_02f9: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller3(!0&,
+ !1)
+ IL_02fe: stloc.s V_23
+ IL_0300: ldloc.0
+ IL_0301: ldloc.s V_21
+ IL_0303: ldloc.s V_22
+ IL_0305: ldloc.s V_23
+ IL_0307: ldstr "Print_T(System.String)"
+ IL_030c: ldloc.s V_9
+ IL_030e: ldfld int32 class MyStruct9`2<string,object>::n
+ IL_0313: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0318: add
+ IL_0319: stloc.0
+ IL_031a: ldstr "TEST10:"
+ IL_031f: call void [System.Console]System.Console::WriteLine(string)
+ IL_0324: nop
+ IL_0325: ldloc.s V_20
+ IL_0327: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller1()
+ IL_032c: stloc.s V_21
+ IL_032e: ldloc.s V_20
+ IL_0330: ldloca.s V_10
+ IL_0332: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller2(!0&)
+ IL_0337: stloc.s V_22
+ IL_0339: ldloc.s V_20
+ IL_033b: ldloca.s V_10
+ IL_033d: ldstr "mystring"
+ IL_0342: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller3(!0&,
+ !1)
+ IL_0347: stloc.s V_23
+ IL_0349: ldloc.0
+ IL_034a: ldloc.s V_21
+ IL_034c: ldloc.s V_22
+ IL_034e: ldloc.s V_23
+ IL_0350: ldstr "Print_T(System.String)"
+ IL_0355: ldloc.s V_10
+ IL_0357: ldfld int32 class MyStruct10`2<string,object>::n
+ IL_035c: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0361: add
+ IL_0362: stloc.0
+ IL_0363: ldloc.0
+ IL_0364: brfalse.s IL_0369
+
+ IL_0366: ldc.i4.m1
+ IL_0367: br.s IL_036b
+
+ IL_0369: ldc.i4.s 100
+ IL_036b: stloc.s V_24
+ IL_036d: br.s IL_036f
+
+ IL_036f: ldloc.s V_24
+ IL_0371: ret
+ } // end of method Program::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Program::.ctor
+
+} // end of class Program
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file SealedTypes.res
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj
new file mode 100644
index 0000000000..0788325260
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>SealedTypes</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="SealedTypes.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il
new file mode 100644
index 0000000000..066bdee1a4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il
@@ -0,0 +1,819 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.20528
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly Variance1
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module Variance1.exe
+// MVID: {DC3FB067-F52C-4120-BD62-DFA180241B4B}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x009D0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class interface private abstract auto ansi I`1<-S>
+{
+ .method public hidebysig newslot abstract virtual
+ instance string Print(!S 'value') cil managed
+ {
+ } // end of method I`1::Print
+
+} // end of class I`1
+
+.class public auto ansi beforefieldinit CBase
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method CBase::.ctor
+
+} // end of class CBase
+
+.class public auto ansi beforefieldinit CDerived
+ extends CBase
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void CBase::.ctor()
+ IL_0006: ret
+ } // end of method CDerived::.ctor
+
+} // end of class CDerived
+
+.class public sequential ansi sealed beforefieldinit MyStruct1
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+} // end of class MyStruct1
+
+.class public sequential ansi sealed beforefieldinit MyStruct2
+ extends [mscorlib]System.ValueType
+ implements class I`1<object>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+} // end of class MyStruct2
+
+.class public sequential ansi sealed beforefieldinit MyStruct3`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<object>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+} // end of class MyStruct3`2
+
+.class public sequential ansi sealed beforefieldinit MyStruct4`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<object>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(object 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(object)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+} // end of class MyStruct4`2
+
+.class public sequential ansi sealed beforefieldinit MyStruct5`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct5`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct5`1::Print
+
+} // end of class MyStruct5`1
+
+.class public sequential ansi sealed beforefieldinit MyStruct6`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<!T>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct6`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct6`1::Print
+
+} // end of class MyStruct6`1
+
+.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TCBase>) TMyStruct,TCBase>
+ extends [mscorlib]System.Object
+{
+ .field public !TCBase 'value'
+ .method public hidebysig instance string
+ Caller1() cil managed
+ {
+ // Code size 58 (0x3a)
+ .maxstack 2
+ .locals init (!TMyStruct V_0,
+ string V_1,
+ !TMyStruct V_2)
+ IL_0000: nop
+ IL_0001: ldloca.s V_2
+ IL_0003: initobj !TMyStruct
+ IL_0009: ldloc.2
+ IL_000a: box !TMyStruct
+ IL_000f: brfalse.s IL_001c
+
+ IL_0011: ldloca.s V_2
+ IL_0013: initobj !TMyStruct
+ IL_0019: ldloc.2
+ IL_001a: br.s IL_0021
+
+ IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>()
+ IL_0021: stloc.0
+ IL_0022: ldloca.s V_0
+ IL_0024: ldarg.0
+ IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value'
+ IL_002a: constrained. !TMyStruct
+ IL_0030: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_0035: stloc.1
+ IL_0036: br.s IL_0038
+
+ IL_0038: ldloc.1
+ IL_0039: ret
+ } // end of method Conversion`2::Caller1
+
+ .method public hidebysig instance string
+ Caller2(!TMyStruct& 'instance') cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.0
+ IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value'
+ IL_0008: constrained. !TMyStruct
+ IL_000e: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Conversion`2::Caller2
+
+ .method public hidebysig instance string
+ Caller3(!TMyStruct& 'instance',
+ !TCBase param) cil managed
+ {
+ // Code size 19 (0x13)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.2
+ IL_0003: constrained. !TMyStruct
+ IL_0009: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_000e: stloc.0
+ IL_000f: br.s IL_0011
+
+ IL_0011: ldloc.0
+ IL_0012: ret
+ } // end of method Conversion`2::Caller3
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Conversion`2::.ctor
+
+} // end of class Conversion`2
+
+
+.class private auto ansi beforefieldinit Program
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Verification(string res1,
+ string res2,
+ string res3,
+ string expected,
+ int32 n) cil managed
+ {
+ // Code size 150 (0x96)
+ .maxstack 2
+ .locals init (int32 V_0,
+ bool V_1)
+ IL_0000: nop
+ IL_0001: ldstr " "
+ IL_0006: ldarg.0
+ IL_0007: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_000c: call void [System.Console]System.Console::WriteLine(string)
+ IL_0011: nop
+ IL_0012: ldstr " "
+ IL_0017: ldarg.1
+ IL_0018: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_001d: call void [System.Console]System.Console::WriteLine(string)
+ IL_0022: nop
+ IL_0023: ldstr " "
+ IL_0028: ldarg.2
+ IL_0029: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_002e: call void [System.Console]System.Console::WriteLine(string)
+ IL_0033: nop
+ IL_0034: ldstr " "
+ IL_0039: ldarg.s n
+ IL_003b: box [mscorlib]System.Int32
+ IL_0040: call string [mscorlib]System.String::Concat(object,
+ object)
+ IL_0045: call void [System.Console]System.Console::WriteLine(string)
+ IL_004a: nop
+ IL_004b: ldarg.0
+ IL_004c: ldarg.3
+ IL_004d: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0052: brfalse.s IL_0070
+
+ IL_0054: ldarg.1
+ IL_0055: ldarg.3
+ IL_0056: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_005b: brfalse.s IL_0070
+
+ IL_005d: ldarg.2
+ IL_005e: ldarg.3
+ IL_005f: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0064: brfalse.s IL_0070
+
+ IL_0066: ldarg.s n
+ IL_0068: ldc.i4.2
+ IL_0069: ceq
+ IL_006b: ldc.i4.0
+ IL_006c: ceq
+ IL_006e: br.s IL_0071
+
+ IL_0070: ldc.i4.1
+ IL_0071: stloc.1
+ IL_0072: ldloc.1
+ IL_0073: brtrue.s IL_0085
+
+ IL_0075: nop
+ IL_0076: ldstr "PASS\n"
+ IL_007b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0080: nop
+ IL_0081: ldc.i4.0
+ IL_0082: stloc.0
+ IL_0083: br.s IL_0094
+
+ IL_0085: ldstr "FAIL\n"
+ IL_008a: call void [System.Console]System.Console::WriteLine(string)
+ IL_008f: nop
+ IL_0090: ldc.i4.1
+ IL_0091: stloc.0
+ IL_0092: br.s IL_0094
+
+ IL_0094: ldloc.0
+ IL_0095: ret
+ } // end of method Program::Verification
+
+ .method private hidebysig static int32
+ Main(string[] args) cil managed
+ {
+ .entrypoint
+ // Code size 898 (0x382)
+ .maxstack 6
+ .locals init (int32 V_0,
+ valuetype MyStruct1 V_1,
+ valuetype MyStruct2 V_2,
+ valuetype MyStruct3`2<object,object> V_3,
+ valuetype MyStruct4`2<object,object> V_4,
+ valuetype MyStruct5`1<object> V_5,
+ valuetype MyStruct6`1<object> V_6,
+ class Conversion`2<valuetype MyStruct1,class CBase> V_11,
+ class Conversion`2<valuetype MyStruct2,class CBase> V_12,
+ class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase> V_13,
+ class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase> V_14,
+ class Conversion`2<valuetype MyStruct5`1<object>,class CBase> V_15,
+ class Conversion`2<valuetype MyStruct6`1<object>,class CBase> V_16,
+ string V_21,
+ string V_22,
+ string V_23,
+ int32 V_24)
+ IL_0000: nop
+ IL_0001: ldc.i4.0
+ IL_0002: stloc.0
+ IL_0003: ldloca.s V_1
+ IL_0005: initobj MyStruct1
+ IL_000b: ldloca.s V_2
+ IL_000d: initobj MyStruct2
+ IL_0013: ldloca.s V_3
+ IL_0015: initobj valuetype MyStruct3`2<object,object>
+ IL_001b: ldloca.s V_4
+ IL_001d: initobj valuetype MyStruct4`2<object,object>
+ IL_0023: ldloca.s V_5
+ IL_0025: initobj valuetype MyStruct5`1<object>
+ IL_002b: ldloca.s V_6
+ IL_002d: initobj valuetype MyStruct6`1<object>
+ IL_0053: newobj instance void class Conversion`2<valuetype MyStruct1,class CBase>::.ctor()
+ IL_0058: stloc.s V_11
+ IL_005a: newobj instance void class Conversion`2<valuetype MyStruct2,class CBase>::.ctor()
+ IL_005f: stloc.s V_12
+ IL_0061: newobj instance void class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::.ctor()
+ IL_0066: stloc.s V_13
+ IL_0068: newobj instance void class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::.ctor()
+ IL_006d: stloc.s V_14
+ IL_006f: newobj instance void class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::.ctor()
+ IL_0074: stloc.s V_15
+ IL_0076: newobj instance void class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::.ctor()
+ IL_007b: stloc.s V_16
+ IL_0099: ldstr "TEST1:"
+ IL_009e: call void [System.Console]System.Console::WriteLine(string)
+ IL_00a3: nop
+ IL_00a4: ldloc.s V_11
+ IL_00a6: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller1()
+ IL_00ab: stloc.s V_21
+ IL_00ad: ldloc.s V_11
+ IL_00af: ldloca.s V_1
+ IL_00b1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller2(!0&)
+ IL_00b6: stloc.s V_22
+ IL_00b8: ldloc.s V_11
+ IL_00ba: ldloca.s V_1
+ IL_00bc: newobj instance void class CBase::.ctor()
+ IL_00c1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller3(!0&,
+ !1)
+ IL_00c6: stloc.s V_23
+ IL_00c8: ldloc.0
+ IL_00c9: ldloc.s V_21
+ IL_00cb: ldloc.s V_22
+ IL_00cd: ldloc.s V_23
+ IL_00cf: ldstr "Print(object)"
+ IL_00d4: ldloca.s V_1
+ IL_00d6: ldfld int32 MyStruct1::n
+ IL_00db: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_00e0: add
+ IL_00e1: stloc.0
+ IL_00e2: ldstr "TEST2:"
+ IL_00e7: call void [System.Console]System.Console::WriteLine(string)
+ IL_00ec: nop
+ IL_00ed: ldloc.s V_12
+ IL_00ef: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller1()
+ IL_00f4: stloc.s V_21
+ IL_00f6: ldloc.s V_12
+ IL_00f8: ldloca.s V_2
+ IL_00fa: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller2(!0&)
+ IL_00ff: stloc.s V_22
+ IL_0101: ldloc.s V_12
+ IL_0103: ldloca.s V_2
+ IL_0105: newobj instance void class CBase::.ctor()
+ IL_010a: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller3(!0&,
+ !1)
+ IL_010f: stloc.s V_23
+ IL_0111: ldloc.0
+ IL_0112: ldloc.s V_21
+ IL_0114: ldloc.s V_22
+ IL_0116: ldloc.s V_23
+ IL_0118: ldstr "Print(object)"
+ IL_011d: ldloca.s V_2
+ IL_011f: ldfld int32 MyStruct2::n
+ IL_0124: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0129: add
+ IL_012a: stloc.0
+ IL_012b: ldstr "TEST3:"
+ IL_0130: call void [System.Console]System.Console::WriteLine(string)
+ IL_0135: nop
+ IL_0136: ldloc.s V_13
+ IL_0138: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller1()
+ IL_013d: stloc.s V_21
+ IL_013f: ldloc.s V_13
+ IL_0141: ldloca.s V_3
+ IL_0143: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller2(!0&)
+ IL_0148: stloc.s V_22
+ IL_014a: ldloc.s V_13
+ IL_014c: ldloca.s V_3
+ IL_014e: newobj instance void class CBase::.ctor()
+ IL_0153: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_0158: stloc.s V_23
+ IL_015a: ldloc.0
+ IL_015b: ldloc.s V_21
+ IL_015d: ldloc.s V_22
+ IL_015f: ldloc.s V_23
+ IL_0161: ldstr "Print(object)"
+ IL_0166: ldloca.s V_3
+ IL_0168: ldfld int32 valuetype MyStruct3`2<object,object>::n
+ IL_016d: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0172: add
+ IL_0173: stloc.0
+ IL_0174: ldstr "TEST4:"
+ IL_0179: call void [System.Console]System.Console::WriteLine(string)
+ IL_017e: nop
+ IL_017f: ldloc.s V_14
+ IL_0181: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller1()
+ IL_0186: stloc.s V_21
+ IL_0188: ldloc.s V_14
+ IL_018a: ldloca.s V_4
+ IL_018c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller2(!0&)
+ IL_0191: stloc.s V_22
+ IL_0193: ldloc.s V_14
+ IL_0195: ldloca.s V_4
+ IL_0197: newobj instance void class CBase::.ctor()
+ IL_019c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_01a1: stloc.s V_23
+ IL_01a3: ldloc.0
+ IL_01a4: ldloc.s V_21
+ IL_01a6: ldloc.s V_22
+ IL_01a8: ldloc.s V_23
+ IL_01aa: ldstr "Print(object)"
+ IL_01af: ldloca.s V_4
+ IL_01b1: ldfld int32 valuetype MyStruct4`2<object,object>::n
+ IL_01b6: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_01bb: add
+ IL_01bc: stloc.0
+ IL_01bd: ldstr "TEST5:"
+ IL_01c2: call void [System.Console]System.Console::WriteLine(string)
+ IL_01c7: nop
+ IL_01c8: ldloc.s V_15
+ IL_01ca: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller1()
+ IL_01cf: stloc.s V_21
+ IL_01d1: ldloc.s V_15
+ IL_01d3: ldloca.s V_5
+ IL_01d5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller2(!0&)
+ IL_01da: stloc.s V_22
+ IL_01dc: ldloc.s V_15
+ IL_01de: ldloca.s V_5
+ IL_01e0: newobj instance void class CBase::.ctor()
+ IL_01e5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_01ea: stloc.s V_23
+ IL_01ec: ldloc.0
+ IL_01ed: ldloc.s V_21
+ IL_01ef: ldloc.s V_22
+ IL_01f1: ldloc.s V_23
+ IL_01f3: ldstr "Print_T(System.Object)"
+ IL_01f8: ldloca.s V_5
+ IL_01fa: ldfld int32 valuetype MyStruct5`1<object>::n
+ IL_01ff: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0204: add
+ IL_0205: stloc.0
+ IL_0206: ldstr "TEST6:"
+ IL_020b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0210: nop
+ IL_0211: ldloc.s V_16
+ IL_0213: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller1()
+ IL_0218: stloc.s V_21
+ IL_021a: ldloc.s V_16
+ IL_021c: ldloca.s V_6
+ IL_021e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller2(!0&)
+ IL_0223: stloc.s V_22
+ IL_0225: ldloc.s V_16
+ IL_0227: ldloca.s V_6
+ IL_0229: newobj instance void class CBase::.ctor()
+ IL_022e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_0233: stloc.s V_23
+ IL_0235: ldloc.0
+ IL_0236: ldloc.s V_21
+ IL_0238: ldloc.s V_22
+ IL_023a: ldloc.s V_23
+ IL_023c: ldstr "Print_T(System.Object)"
+ IL_0241: ldloca.s V_6
+ IL_0243: ldfld int32 valuetype MyStruct6`1<object>::n
+ IL_0248: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_024d: add
+ IL_024e: stloc.0
+ IL_0373: ldloc.0
+ IL_0374: brfalse.s IL_0379
+
+ IL_0376: ldc.i4.m1
+ IL_0377: br.s IL_037b
+
+ IL_0379: ldc.i4.s 100
+ IL_037b: stloc.s V_24
+ IL_037d: br.s IL_037f
+
+ IL_037f: ldloc.s V_24
+ IL_0381: ret
+ } // end of method Program::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Program::.ctor
+
+} // end of class Program
+
+
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj
new file mode 100644
index 0000000000..62e7893ac6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Variance1</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Variance1.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il
new file mode 100644
index 0000000000..56ee0ffc91
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il
@@ -0,0 +1,1191 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+
+
+// Metadata version: v4.0.20528
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 4:0:0:0
+}
+.assembly Variance1
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
+ 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module Variance1.exe
+// MVID: {DC3FB067-F52C-4120-BD62-DFA180241B4B}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x009D0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class interface private abstract auto ansi I`1<-S>
+{
+ .method public hidebysig newslot abstract virtual
+ instance string Print(!S 'value') cil managed
+ {
+ } // end of method I`1::Print
+
+} // end of class I`1
+
+.class public auto ansi beforefieldinit CBase
+ extends [mscorlib]System.Object
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method CBase::.ctor
+
+} // end of class CBase
+
+.class public auto ansi beforefieldinit CDerived
+ extends CBase
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void CBase::.ctor()
+ IL_0006: ret
+ } // end of method CDerived::.ctor
+
+} // end of class CDerived
+
+.class public sequential ansi sealed beforefieldinit MyStruct1
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<class CBase>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct1::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct1::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct1::Print
+
+} // end of class MyStruct1
+
+.class public sequential ansi sealed beforefieldinit MyStruct2
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CBase>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 MyStruct2::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 MyStruct2::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct2::Print
+
+} // end of class MyStruct2
+
+.class public sequential ansi sealed beforefieldinit MyStruct3`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<class CBase>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct3`2::Print
+
+} // end of class MyStruct3`2
+
+.class public sequential ansi sealed beforefieldinit MyStruct4`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CBase>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final
+ instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+ .method public hidebysig newslot virtual final
+ instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct4`2::Print
+
+} // end of class MyStruct4`2
+
+.class public sequential ansi sealed beforefieldinit MyStruct5`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CDerived>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct5`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct5`1::Print
+
+} // end of class MyStruct5`1
+
+.class public sequential ansi sealed beforefieldinit MyStruct6`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<!T>,
+ class I`1<class CDerived>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print(CDerived)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct6`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct6`1::Print
+
+} // end of class MyStruct6`1
+
+.class public sequential ansi sealed beforefieldinit MyStruct7`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<class CBase>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct7`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct7`1<!T>::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct7`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct7`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct7`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct7`1::Print
+
+} // end of class MyStruct7`1
+
+.class public sequential ansi sealed beforefieldinit MyStruct8`1<T>
+ extends [mscorlib]System.ValueType
+ implements class I`1<!T>,
+ class I`1<class CBase>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(class CBase 'value') cil managed
+ {
+ // Code size 25 (0x19)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct8`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct8`1<!T>::n
+ IL_000f: ldstr "Print(CBase)"
+ IL_0014: stloc.0
+ IL_0015: br.s IL_0017
+
+ IL_0017: ldloc.0
+ IL_0018: ret
+ } // end of method MyStruct8`1::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct8`1<!T>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct8`1<!T>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct8`1::Print
+
+} // end of class MyStruct8`1
+
+.class public sequential ansi sealed beforefieldinit MyStruct9`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<!T>,
+ class I`1<!U>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct9`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct9`2<!T,!U>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct9`2::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct9`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct9`2<!T,!U>::n
+ IL_000f: ldstr "Print_U("
+ IL_0014: ldtoken !U
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct9`2::Print
+
+} // end of class MyStruct9`2
+
+.class public sequential ansi sealed beforefieldinit MyStruct10`2<T,U>
+ extends [mscorlib]System.ValueType
+ implements class I`1<!U>,
+ class I`1<!T>
+{
+ .field public int32 n
+ .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct10`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct10`2<!T,!U>::n
+ IL_000f: ldstr "Print_T("
+ IL_0014: ldtoken !T
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct10`2::Print
+
+ .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed
+ {
+ // Code size 45 (0x2d)
+ .maxstack 3
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: dup
+ IL_0003: ldfld int32 valuetype MyStruct10`2<!T,!U>::n
+ IL_0008: ldc.i4.1
+ IL_0009: add
+ IL_000a: stfld int32 valuetype MyStruct10`2<!T,!U>::n
+ IL_000f: ldstr "Print_U("
+ IL_0014: ldtoken !U
+ IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001e: ldstr ")"
+ IL_0023: call string [mscorlib]System.String::Concat(object,
+ object,
+ object)
+ IL_0028: stloc.0
+ IL_0029: br.s IL_002b
+
+ IL_002b: ldloc.0
+ IL_002c: ret
+ } // end of method MyStruct10`2::Print
+
+} // end of class MyStruct10`2
+
+.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TCBase>) TMyStruct,TCBase>
+ extends [mscorlib]System.Object
+{
+ .field public !TCBase 'value'
+ .method public hidebysig instance string
+ Caller1() cil managed
+ {
+ // Code size 58 (0x3a)
+ .maxstack 2
+ .locals init (!TMyStruct V_0,
+ string V_1,
+ !TMyStruct V_2)
+ IL_0000: nop
+ IL_0001: ldloca.s V_2
+ IL_0003: initobj !TMyStruct
+ IL_0009: ldloc.2
+ IL_000a: box !TMyStruct
+ IL_000f: brfalse.s IL_001c
+
+ IL_0011: ldloca.s V_2
+ IL_0013: initobj !TMyStruct
+ IL_0019: ldloc.2
+ IL_001a: br.s IL_0021
+
+ IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>()
+ IL_0021: stloc.0
+ IL_0022: ldloca.s V_0
+ IL_0024: ldarg.0
+ IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value'
+ IL_002a: constrained. !TMyStruct
+ IL_0030: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_0035: stloc.1
+ IL_0036: br.s IL_0038
+
+ IL_0038: ldloc.1
+ IL_0039: ret
+ } // end of method Conversion`2::Caller1
+
+ .method public hidebysig instance string
+ Caller2(!TMyStruct& 'instance') cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.0
+ IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value'
+ IL_0008: constrained. !TMyStruct
+ IL_000e: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_0013: stloc.0
+ IL_0014: br.s IL_0016
+
+ IL_0016: ldloc.0
+ IL_0017: ret
+ } // end of method Conversion`2::Caller2
+
+ .method public hidebysig instance string
+ Caller3(!TMyStruct& 'instance',
+ !TCBase param) cil managed
+ {
+ // Code size 19 (0x13)
+ .maxstack 2
+ .locals init (string V_0)
+ IL_0000: nop
+ IL_0001: ldarg.1
+ IL_0002: ldarg.2
+ IL_0003: constrained. !TMyStruct
+ IL_0009: callvirt instance string class I`1<!TCBase>::Print(!0)
+ IL_000e: stloc.0
+ IL_000f: br.s IL_0011
+
+ IL_0011: ldloc.0
+ IL_0012: ret
+ } // end of method Conversion`2::Caller3
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Conversion`2::.ctor
+
+} // end of class Conversion`2
+
+
+.class private auto ansi beforefieldinit Program
+ extends [mscorlib]System.Object
+{
+ .method private hidebysig static int32
+ Verification(string res1,
+ string res2,
+ string res3,
+ string expected,
+ int32 n) cil managed
+ {
+ // Code size 150 (0x96)
+ .maxstack 2
+ .locals init (int32 V_0,
+ bool V_1)
+ IL_0000: nop
+ IL_0001: ldstr " "
+ IL_0006: ldarg.0
+ IL_0007: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_000c: call void [System.Console]System.Console::WriteLine(string)
+ IL_0011: nop
+ IL_0012: ldstr " "
+ IL_0017: ldarg.1
+ IL_0018: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_001d: call void [System.Console]System.Console::WriteLine(string)
+ IL_0022: nop
+ IL_0023: ldstr " "
+ IL_0028: ldarg.2
+ IL_0029: call string [mscorlib]System.String::Concat(string,
+ string)
+ IL_002e: call void [System.Console]System.Console::WriteLine(string)
+ IL_0033: nop
+ IL_0034: ldstr " "
+ IL_0039: ldarg.s n
+ IL_003b: box [mscorlib]System.Int32
+ IL_0040: call string [mscorlib]System.String::Concat(object,
+ object)
+ IL_0045: call void [System.Console]System.Console::WriteLine(string)
+ IL_004a: nop
+ IL_004b: ldarg.0
+ IL_004c: ldarg.3
+ IL_004d: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0052: brfalse.s IL_0070
+
+ IL_0054: ldarg.1
+ IL_0055: ldarg.3
+ IL_0056: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_005b: brfalse.s IL_0070
+
+ IL_005d: ldarg.2
+ IL_005e: ldarg.3
+ IL_005f: call bool [mscorlib]System.String::op_Equality(string,
+ string)
+ IL_0064: brfalse.s IL_0070
+
+ IL_0066: ldarg.s n
+ IL_0068: ldc.i4.2
+ IL_0069: ceq
+ IL_006b: ldc.i4.0
+ IL_006c: ceq
+ IL_006e: br.s IL_0071
+
+ IL_0070: ldc.i4.1
+ IL_0071: stloc.1
+ IL_0072: ldloc.1
+ IL_0073: brtrue.s IL_0085
+
+ IL_0075: nop
+ IL_0076: ldstr "PASS\n"
+ IL_007b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0080: nop
+ IL_0081: ldc.i4.0
+ IL_0082: stloc.0
+ IL_0083: br.s IL_0094
+
+ IL_0085: ldstr "FAIL\n"
+ IL_008a: call void [System.Console]System.Console::WriteLine(string)
+ IL_008f: nop
+ IL_0090: ldc.i4.1
+ IL_0091: stloc.0
+ IL_0092: br.s IL_0094
+
+ IL_0094: ldloc.0
+ IL_0095: ret
+ } // end of method Program::Verification
+
+ .method private hidebysig static int32
+ Main(string[] args) cil managed
+ {
+ .entrypoint
+ // Code size 898 (0x382)
+ .maxstack 6
+ .locals init (int32 V_0,
+ valuetype MyStruct1 V_1,
+ valuetype MyStruct2 V_2,
+ valuetype MyStruct3`2<object,object> V_3,
+ valuetype MyStruct4`2<object,object> V_4,
+ valuetype MyStruct5`1<class CBase> V_5,
+ valuetype MyStruct6`1<class CBase> V_6,
+ valuetype MyStruct7`1<class CDerived> V_7,
+ valuetype MyStruct8`1<class CDerived> V_8,
+ valuetype MyStruct9`2<class CDerived,class CBase> V_9,
+ valuetype MyStruct10`2<class CDerived,class CBase> V_10,
+ class Conversion`2<valuetype MyStruct1,class CBase> V_11,
+ class Conversion`2<valuetype MyStruct2,class CBase> V_12,
+ class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase> V_13,
+ class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase> V_14,
+ class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase> V_15,
+ class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase> V_16,
+ class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase> V_17,
+ class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase> V_18,
+ class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase> V_19,
+ class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase> V_20,
+ string V_21,
+ string V_22,
+ string V_23,
+ int32 V_24)
+ IL_0000: nop
+ IL_0001: ldc.i4.0
+ IL_0002: stloc.0
+ IL_0003: ldloca.s V_1
+ IL_0005: initobj MyStruct1
+ IL_000b: ldloca.s V_2
+ IL_000d: initobj MyStruct2
+ IL_0013: ldloca.s V_3
+ IL_0015: initobj valuetype MyStruct3`2<object,object>
+ IL_001b: ldloca.s V_4
+ IL_001d: initobj valuetype MyStruct4`2<object,object>
+ IL_0023: ldloca.s V_5
+ IL_0025: initobj valuetype MyStruct5`1<class CBase>
+ IL_002b: ldloca.s V_6
+ IL_002d: initobj valuetype MyStruct6`1<class CBase>
+ IL_0033: ldloca.s V_7
+ IL_0035: initobj valuetype MyStruct7`1<class CDerived>
+ IL_003b: ldloca.s V_8
+ IL_003d: initobj valuetype MyStruct8`1<class CDerived>
+ IL_0043: ldloca.s V_9
+ IL_0045: initobj valuetype MyStruct9`2<class CDerived,class CBase>
+ IL_004b: ldloca.s V_10
+ IL_004d: initobj valuetype MyStruct10`2<class CDerived,class CBase>
+ IL_0053: newobj instance void class Conversion`2<valuetype MyStruct1,class CBase>::.ctor()
+ IL_0058: stloc.s V_11
+ IL_005a: newobj instance void class Conversion`2<valuetype MyStruct2,class CBase>::.ctor()
+ IL_005f: stloc.s V_12
+ IL_0061: newobj instance void class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::.ctor()
+ IL_0066: stloc.s V_13
+ IL_0068: newobj instance void class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::.ctor()
+ IL_006d: stloc.s V_14
+ IL_006f: newobj instance void class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::.ctor()
+ IL_0074: stloc.s V_15
+ IL_0076: newobj instance void class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::.ctor()
+ IL_007b: stloc.s V_16
+ IL_007d: newobj instance void class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::.ctor()
+ IL_0082: stloc.s V_17
+ IL_0084: newobj instance void class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::.ctor()
+ IL_0089: stloc.s V_18
+ IL_008b: newobj instance void class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::.ctor()
+ IL_0090: stloc.s V_19
+ IL_0092: newobj instance void class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::.ctor()
+ IL_0097: stloc.s V_20
+ IL_0099: ldstr "TEST1:"
+ IL_009e: call void [System.Console]System.Console::WriteLine(string)
+ IL_00a3: nop
+ IL_00a4: ldloc.s V_11
+ IL_00a6: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller1()
+ IL_00ab: stloc.s V_21
+ IL_00ad: ldloc.s V_11
+ IL_00af: ldloca.s V_1
+ IL_00b1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller2(!0&)
+ IL_00b6: stloc.s V_22
+ IL_00b8: ldloc.s V_11
+ IL_00ba: ldloca.s V_1
+ IL_00bc: newobj instance void class CBase::.ctor()
+ IL_00c1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller3(!0&,
+ !1)
+ IL_00c6: stloc.s V_23
+ IL_00c8: ldloc.0
+ IL_00c9: ldloc.s V_21
+ IL_00cb: ldloc.s V_22
+ IL_00cd: ldloc.s V_23
+ IL_00cf: ldstr "Print(CBase)"
+ IL_00d4: ldloca.s V_1
+ IL_00d6: ldfld int32 MyStruct1::n
+ IL_00db: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_00e0: add
+ IL_00e1: stloc.0
+ IL_00e2: ldstr "TEST2:"
+ IL_00e7: call void [System.Console]System.Console::WriteLine(string)
+ IL_00ec: nop
+ IL_00ed: ldloc.s V_12
+ IL_00ef: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller1()
+ IL_00f4: stloc.s V_21
+ IL_00f6: ldloc.s V_12
+ IL_00f8: ldloca.s V_2
+ IL_00fa: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller2(!0&)
+ IL_00ff: stloc.s V_22
+ IL_0101: ldloc.s V_12
+ IL_0103: ldloca.s V_2
+ IL_0105: newobj instance void class CBase::.ctor()
+ IL_010a: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller3(!0&,
+ !1)
+ IL_010f: stloc.s V_23
+ IL_0111: ldloc.0
+ IL_0112: ldloc.s V_21
+ IL_0114: ldloc.s V_22
+ IL_0116: ldloc.s V_23
+ IL_0118: ldstr "Print(CBase)"
+ IL_011d: ldloca.s V_2
+ IL_011f: ldfld int32 MyStruct2::n
+ IL_0124: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0129: add
+ IL_012a: stloc.0
+ IL_012b: ldstr "TEST3:"
+ IL_0130: call void [System.Console]System.Console::WriteLine(string)
+ IL_0135: nop
+ IL_0136: ldloc.s V_13
+ IL_0138: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller1()
+ IL_013d: stloc.s V_21
+ IL_013f: ldloc.s V_13
+ IL_0141: ldloca.s V_3
+ IL_0143: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller2(!0&)
+ IL_0148: stloc.s V_22
+ IL_014a: ldloc.s V_13
+ IL_014c: ldloca.s V_3
+ IL_014e: newobj instance void class CBase::.ctor()
+ IL_0153: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_0158: stloc.s V_23
+ IL_015a: ldloc.0
+ IL_015b: ldloc.s V_21
+ IL_015d: ldloc.s V_22
+ IL_015f: ldloc.s V_23
+ IL_0161: ldstr "Print(CBase)"
+ IL_0166: ldloca.s V_3
+ IL_0168: ldfld int32 valuetype MyStruct3`2<object,object>::n
+ IL_016d: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0172: add
+ IL_0173: stloc.0
+ IL_0174: ldstr "TEST4:"
+ IL_0179: call void [System.Console]System.Console::WriteLine(string)
+ IL_017e: nop
+ IL_017f: ldloc.s V_14
+ IL_0181: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller1()
+ IL_0186: stloc.s V_21
+ IL_0188: ldloc.s V_14
+ IL_018a: ldloca.s V_4
+ IL_018c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller2(!0&)
+ IL_0191: stloc.s V_22
+ IL_0193: ldloc.s V_14
+ IL_0195: ldloca.s V_4
+ IL_0197: newobj instance void class CBase::.ctor()
+ IL_019c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller3(!0&,
+ !1)
+ IL_01a1: stloc.s V_23
+ IL_01a3: ldloc.0
+ IL_01a4: ldloc.s V_21
+ IL_01a6: ldloc.s V_22
+ IL_01a8: ldloc.s V_23
+ IL_01aa: ldstr "Print(CBase)"
+ IL_01af: ldloca.s V_4
+ IL_01b1: ldfld int32 valuetype MyStruct4`2<object,object>::n
+ IL_01b6: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_01bb: add
+ IL_01bc: stloc.0
+ IL_01bd: ldstr "TEST5:"
+ IL_01c2: call void [System.Console]System.Console::WriteLine(string)
+ IL_01c7: nop
+ IL_01c8: ldloc.s V_15
+ IL_01ca: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller1()
+ IL_01cf: stloc.s V_21
+ IL_01d1: ldloc.s V_15
+ IL_01d3: ldloca.s V_5
+ IL_01d5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller2(!0&)
+ IL_01da: stloc.s V_22
+ IL_01dc: ldloc.s V_15
+ IL_01de: ldloca.s V_5
+ IL_01e0: newobj instance void class CBase::.ctor()
+ IL_01e5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller3(!0&,
+ !1)
+ IL_01ea: stloc.s V_23
+ IL_01ec: ldloc.0
+ IL_01ed: ldloc.s V_21
+ IL_01ef: ldloc.s V_22
+ IL_01f1: ldloc.s V_23
+ IL_01f3: ldstr "Print_T(CBase)"
+ IL_01f8: ldloca.s V_5
+ IL_01fa: ldfld int32 valuetype MyStruct5`1<class CBase>::n
+ IL_01ff: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0204: add
+ IL_0205: stloc.0
+ IL_0206: ldstr "TEST6:"
+ IL_020b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0210: nop
+ IL_0211: ldloc.s V_16
+ IL_0213: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller1()
+ IL_0218: stloc.s V_21
+ IL_021a: ldloc.s V_16
+ IL_021c: ldloca.s V_6
+ IL_021e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller2(!0&)
+ IL_0223: stloc.s V_22
+ IL_0225: ldloc.s V_16
+ IL_0227: ldloca.s V_6
+ IL_0229: newobj instance void class CBase::.ctor()
+ IL_022e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller3(!0&,
+ !1)
+ IL_0233: stloc.s V_23
+ IL_0235: ldloc.0
+ IL_0236: ldloc.s V_21
+ IL_0238: ldloc.s V_22
+ IL_023a: ldloc.s V_23
+ IL_023c: ldstr "Print_T(CBase)"
+ IL_0241: ldloca.s V_6
+ IL_0243: ldfld int32 valuetype MyStruct6`1<class CBase>::n
+ IL_0248: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_024d: add
+ IL_024e: stloc.0
+ IL_024f: ldstr "TEST7:"
+ IL_0254: call void [System.Console]System.Console::WriteLine(string)
+ IL_0259: nop
+ IL_025a: ldloc.s V_17
+ IL_025c: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller1()
+ IL_0261: stloc.s V_21
+ IL_0263: ldloc.s V_17
+ IL_0265: ldloca.s V_7
+ IL_0267: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller2(!0&)
+ IL_026c: stloc.s V_22
+ IL_026e: ldloc.s V_17
+ IL_0270: ldloca.s V_7
+ IL_0272: newobj instance void class CBase::.ctor()
+ IL_0277: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller3(!0&,
+ !1)
+ IL_027c: stloc.s V_23
+ IL_027e: ldloc.0
+ IL_027f: ldloc.s V_21
+ IL_0281: ldloc.s V_22
+ IL_0283: ldloc.s V_23
+ IL_0285: ldstr "Print(CBase)"
+ IL_028a: ldloca.s V_7
+ IL_028c: ldfld int32 valuetype MyStruct7`1<class CDerived>::n
+ IL_0291: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0296: add
+ IL_0297: stloc.0
+ IL_0298: ldstr "TEST8:"
+ IL_029d: call void [System.Console]System.Console::WriteLine(string)
+ IL_02a2: nop
+ IL_02a3: ldloc.s V_18
+ IL_02a5: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller1()
+ IL_02aa: stloc.s V_21
+ IL_02ac: ldloc.s V_18
+ IL_02ae: ldloca.s V_8
+ IL_02b0: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller2(!0&)
+ IL_02b5: stloc.s V_22
+ IL_02b7: ldloc.s V_18
+ IL_02b9: ldloca.s V_8
+ IL_02bb: newobj instance void class CBase::.ctor()
+ IL_02c0: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller3(!0&,
+ !1)
+ IL_02c5: stloc.s V_23
+ IL_02c7: ldloc.0
+ IL_02c8: ldloc.s V_21
+ IL_02ca: ldloc.s V_22
+ IL_02cc: ldloc.s V_23
+ IL_02ce: ldstr "Print(CBase)"
+ IL_02d3: ldloca.s V_8
+ IL_02d5: ldfld int32 valuetype MyStruct8`1<class CDerived>::n
+ IL_02da: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_02df: add
+ IL_02e0: stloc.0
+ IL_02e1: ldstr "TEST9:"
+ IL_02e6: call void [System.Console]System.Console::WriteLine(string)
+ IL_02eb: nop
+ IL_02ec: ldloc.s V_19
+ IL_02ee: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller1()
+ IL_02f3: stloc.s V_21
+ IL_02f5: ldloc.s V_19
+ IL_02f7: ldloca.s V_9
+ IL_02f9: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller2(!0&)
+ IL_02fe: stloc.s V_22
+ IL_0300: ldloc.s V_19
+ IL_0302: ldloca.s V_9
+ IL_0304: newobj instance void class CBase::.ctor()
+ IL_0309: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller3(!0&,
+ !1)
+ IL_030e: stloc.s V_23
+ IL_0310: ldloc.0
+ IL_0311: ldloc.s V_21
+ IL_0313: ldloc.s V_22
+ IL_0315: ldloc.s V_23
+ IL_0317: ldstr "Print_U(CBase)"
+ IL_031c: ldloca.s V_9
+ IL_031e: ldfld int32 valuetype MyStruct9`2<class CDerived,class CBase>::n
+ IL_0323: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0328: add
+ IL_0329: stloc.0
+ IL_032a: ldstr "TEST10:"
+ IL_032f: call void [System.Console]System.Console::WriteLine(string)
+ IL_0334: nop
+ IL_0335: ldloc.s V_20
+ IL_0337: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller1()
+ IL_033c: stloc.s V_21
+ IL_033e: ldloc.s V_20
+ IL_0340: ldloca.s V_10
+ IL_0342: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller2(!0&)
+ IL_0347: stloc.s V_22
+ IL_0349: ldloc.s V_20
+ IL_034b: ldloca.s V_10
+ IL_034d: newobj instance void class CBase::.ctor()
+ IL_0352: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller3(!0&,
+ !1)
+ IL_0357: stloc.s V_23
+ IL_0359: ldloc.0
+ IL_035a: ldloc.s V_21
+ IL_035c: ldloc.s V_22
+ IL_035e: ldloc.s V_23
+ IL_0360: ldstr "Print_U(CBase)"
+ IL_0365: ldloca.s V_10
+ IL_0367: ldfld int32 valuetype MyStruct10`2<class CDerived,class CBase>::n
+ IL_036c: call int32 Program::Verification(string,
+ string,
+ string,
+ string,
+ int32)
+ IL_0371: add
+ IL_0372: stloc.0
+ IL_0373: ldloc.0
+ IL_0374: brfalse.s IL_0379
+
+ IL_0376: ldc.i4.m1
+ IL_0377: br.s IL_037b
+
+ IL_0379: ldc.i4.s 100
+ IL_037b: stloc.s V_24
+ IL_037d: br.s IL_037f
+
+ IL_037f: ldloc.s V_24
+ IL_0381: ret
+ } // end of method Program::Main
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Program::.ctor
+
+} // end of class Program
+
+
diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj
new file mode 100644
index 0000000000..82958c56da
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Variance2</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Variance2.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs
new file mode 100644
index 0000000000..a0ac0d1795
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs
@@ -0,0 +1,44 @@
+// 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.
+
+using System;
+
+public interface I<W>
+{
+ string Method();
+}
+public class MyBase<U, V> : I<U>
+{
+ string I<U>.Method()
+ { return "MyBase.Method()"; }
+}
+public class MyClass<T> : MyBase<string, T>, I<T>
+{
+ string I<T>.Method()
+ { return "MyClass.Method()"; }
+}
+
+class Test
+{
+ public static int Main()
+ {
+ MyClass<string> s1 = new MyClass<string>();
+ MyClass<object> s2 = new MyClass<object>();
+
+ string res1 = ((I<string>)s1).Method();
+ string res2 = ((I<string>)s2).Method();
+ string res3 = ((I<object>)s2).Method();
+ Console.WriteLine(res1);
+ Console.WriteLine(res2);
+ Console.WriteLine(res3);
+
+ if (res1 == "MyClass.Method()" && res2 == "MyBase.Method()" && res3 == "MyClass.Method()")
+ {
+ Console.WriteLine("Pass");
+ return 100;
+ }
+ Console.WriteLine("FAIL");
+ return -1;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj
new file mode 100644
index 0000000000..7c817575b1
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_630250</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_630250.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il
new file mode 100644
index 0000000000..babb30d572
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il
@@ -0,0 +1,99 @@
+// 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.
+
+.assembly extern System.Console { }
+/*BUG: Assert: Precondition failure: FAILED: !ContainsGenericVariables() (vm\method.cpp, Line: 1781)
+
+The bug related to populating MethodDesc slots in generic dictionaries at runtime.
+
+ o The dictionary entry "signature" in these cases describes the compile-time <Type>::<Method>
+ pair that targets this MethodDesc.
+
+ o The problem was specific to cases where the implementation of <Type>::<Method> was not defined
+ directly on <Type> but was instead inherited from some generic base class in <Type>'s base
+ class chain.
+*/
+
+.assembly extern mscorlib {}
+.assembly Generated30 {}
+
+.class public DerivedDerived
+ extends class Derived`2<string,string>
+{
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { }
+}
+.class public Derived`2<T0, T1>
+ extends class Base`2<int32,!T1>
+{
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { }
+}
+.class public Base`2<T0, T1>
+{
+ .method public hidebysig newslot virtual instance string Method<M0>() cil managed
+ {
+ ldstr "Base::Method<"
+ ldtoken !!M0
+ call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ call string [mscorlib]System.String::Concat(object,object)
+ ldstr ">"
+ call string [mscorlib]System.String::Concat(object,object)
+ ret
+ }
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { }
+}
+
+
+
+.class private auto ansi beforefieldinit Framework
+{
+ .method private hidebysig static void CheckResult(string expected, string actual) cil managed {
+ .maxstack 8
+ IL_0000: ldstr "EXPECTED : "
+ IL_0005: ldarg.0
+ IL_0006: call string [mscorlib]System.String::Concat(string,string)
+ IL_000b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0010: ldstr "ACTUAL : "
+ IL_0015: ldarg.1
+ IL_0016: call string [mscorlib]System.String::Concat(string,string)
+ IL_001b: call void [System.Console]System.Console::WriteLine(string)
+ IL_0020: ldarg.0
+ IL_0021: ldarg.1
+ IL_0022: call bool [mscorlib]System.String::op_Inequality(string,string)
+ IL_0027: brfalse.s IL_0034
+ IL_0029: ldstr "CheckResult FAILED!"
+ IL_002e: newobj instance void [mscorlib]System.Exception::.ctor(string)
+ IL_0033: throw
+ IL_0034: ret
+ } // end of method Test::CheckResult
+
+ .method static string ConstCaller<T0,T1,(class Derived`2<!!T0,!!T1>)W>(!!W 'inst') cil managed {
+ .maxstack 33
+
+ ldarga.s 0
+ constrained. !!W
+ callvirt instance string class Derived`2<!!T0,!!T1>::Method<object>()
+
+ ret
+ }
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 3
+
+ ldstr "Base::Method<System.Object>"
+ newobj instance void DerivedDerived::.ctor()
+ callvirt instance string class Derived`2<string,string>::Method<object>()
+ call void Framework::CheckResult(string,string)
+
+ ldstr "Base::Method<System.Object>"
+ newobj instance void DerivedDerived::.ctor()
+ call string Framework::ConstCaller<string,string,class DerivedDerived>(!!2)
+ call void Framework::CheckResult(string,string)
+
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 100
+ ret
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj
new file mode 100644
index 0000000000..488b3c4778
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_710121</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_710121.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il
new file mode 100644
index 0000000000..8d590e31b3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il
@@ -0,0 +1,98 @@
+// 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.
+
+.assembly extern System.Console { }
+/*
+if there are 3 classes A,B and C, and B inherits from A and C inherits from B,
+and classes A and B have a public virtual newslot method M(), calling C::M()
+on and instance of C calls the implenation of M() on A if class B is generic.
+The implementation of M() on B should be called. C# will not generate the
+function call DerivedDerived::Method() since the method is not defined on this type
+*/
+
+.assembly extern mscorlib {}
+.assembly Generated26 {}
+
+
+.class public DerivedDerived extends class Derived`2<string,int32>
+{
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {
+ ldarg.0
+ call instance void class Derived`2<string,int32>::.ctor()
+ ret
+ }
+}
+.class public Derived`2<T0, T1> extends Base
+{
+ .method public hidebysig newslot virtual instance string Method() cil managed {
+ ldstr "Derived::Method"
+ ret
+ }
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {
+ ldarg.0
+ call instance void Base::.ctor()
+ ret
+ }
+}
+.class public Base
+{
+ .method public hidebysig newslot virtual instance string Method() cil managed {
+ ldstr "Base::Method"
+ ret
+ }
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+}
+
+
+
+
+.class private auto ansi beforefieldinit Framework
+{
+ .method private hidebysig static int32 CheckResult(string expected, string actual) cil managed {
+ .maxstack 8
+ ldstr "EXPECTED : "
+ ldarg.0
+ call string [mscorlib]System.String::Concat(string,string)
+ call void [System.Console]System.Console::WriteLine(string)
+ ldstr "ACTUAL : "
+ ldarg.1
+ call string [mscorlib]System.String::Concat(string,string)
+ call void [System.Console]System.Console::WriteLine(string)
+ ldarg.0
+ ldarg.1
+ call bool [mscorlib]System.String::op_Inequality(string,string)
+ brfalse.s PASSING
+
+ ldstr "FAIL"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 99
+ br END
+
+ PASSING:
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 100
+
+ END:
+ ret
+
+ } // end of method Test::CheckResult
+
+
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 10
+
+ ldstr "Derived::Method"
+ newobj instance void DerivedDerived::.ctor()
+ callvirt instance string DerivedDerived::Method()
+ call int32 Framework::CheckResult(string,string)
+ ret
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj
new file mode 100644
index 0000000000..516f76df24
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_715437</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_715437.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il
new file mode 100644
index 0000000000..fb65cdd93a
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il
@@ -0,0 +1,130 @@
+// 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.
+
+.assembly extern System.Console { }
+/*
+We basically have an interface I<T,U>, class Base that implements I<string,int> and class Derived
+that inherits from Base, and implements I<int,int>. I<T,U> has a method string Method().
+
+Creating this delegate throws the assert:
+ -> Delegate.CreateDelegate(typeof(myClosedDel), new Derived(), typeof(I<string,int>.GetMethod("Method"));
+
+where MyClosedDel is:
+ -> public delegate string MyClosedDel ();
+
+
+*/
+.assembly extern mscorlib {}
+.assembly Generated0 {}
+
+
+
+.class public Derived extends Base implements class IBaseInterface2`2<int32,int32>
+{
+ .method public hidebysig virtual instance string Method() cil managed {
+ ldstr "Derived::Method"
+ ret
+ }
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {
+ ldarg.0
+ call instance void Base::.ctor()
+ ret
+ }
+}
+.class public Base implements class IBaseInterface2`2<string,int32>
+{
+ .method public hidebysig virtual instance string Method() cil managed {
+ ldstr "Base::Method"
+ ret
+ }
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+}
+.class interface public abstract IBaseInterface2`2<T0,T1>
+{
+ .method public hidebysig newslot abstract virtual instance string Method() cil managed {
+ }
+}
+
+
+
+
+.class public sealed myClosedDel extends [mscorlib]System.MulticastDelegate {
+ .method public hidebysig specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed {}
+ .method public hidebysig newslot virtual instance class [mscorlib]System.IAsyncResult BeginInvoke(class [mscorlib]System.AsyncCallback callback, object 'object') runtime managed {}
+ .method public hidebysig newslot virtual instance string Invoke() runtime managed {}
+ .method public hidebysig newslot virtual instance string EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed {}
+}
+.class private auto ansi beforefieldinit Framework {
+ .method public hidebysig static string DelCall0(object inst, class [mscorlib]System.Type t, string mName) cil managed {
+
+ //CS:
+ //Delegate d = Delegate.CreateDelegate(typeof(myClosedDel), inst, t.GetMethod(mName));
+ //return (string)d.DynamicInvoke(null);
+
+ .maxstack 10
+ ldtoken myClosedDel
+ call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ ldarg.0
+ ldarg.1
+ ldarg.2
+ callvirt instance class [mscorlib]System.Reflection.MethodInfo [mscorlib]System.Type::GetMethod(string)
+ call class [mscorlib]System.Delegate [mscorlib]System.Delegate::CreateDelegate(class [mscorlib]System.Type,object,class [mscorlib]System.Reflection.MethodInfo)
+ ldnull
+ callvirt instance object [mscorlib]System.Delegate::DynamicInvoke(object[])
+ castclass [mscorlib]System.String
+ ret
+ }
+ .method private hidebysig static int32 CheckResult(string expected, string actual) cil managed {
+ .maxstack 8
+ ldstr "EXPECTED : "
+ ldarg.0
+ call string [mscorlib]System.String::Concat(string,string)
+ call void [System.Console]System.Console::WriteLine(string)
+ ldstr "ACTUAL : "
+ ldarg.1
+ call string [mscorlib]System.String::Concat(string,string)
+ call void [System.Console]System.Console::WriteLine(string)
+ ldarg.0
+ ldarg.1
+ call bool [mscorlib]System.String::op_Inequality(string,string)
+ brfalse.s PASSING
+
+ ldstr "FAIL"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 99
+ br END
+
+ PASSING:
+ ldstr "PASS"
+ call void [System.Console]System.Console::WriteLine(string)
+ ldc.i4.s 100
+
+ END:
+ ret
+
+ } // end of method Test::CheckResult
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 10
+ .locals init (object V_0)
+
+
+ //EXPECTED RETURN: "Derived::Method"
+ ldstr "Derived::Method"
+ newobj instance void class Derived::.ctor()
+ ldtoken class IBaseInterface2`2<string,int32>
+ call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ ldstr "Method"
+ call string Framework::DelCall0(object,class [mscorlib]System.Type,string)
+ call int32 Framework::CheckResult(string,string)
+
+
+ ret
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj
new file mode 100644
index 0000000000..b7d4ea7740
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_720779</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_720779.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs
new file mode 100644
index 0000000000..837297efe6
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs
@@ -0,0 +1,168 @@
+// 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.
+
+using System;
+
+
+//==================== Cases of nested classes ====================//
+class Outer1
+{
+ protected int field;
+
+ public class Inner
+ {
+ public int Method(Outer1 param) { return (++param.field); }
+ }
+}
+class Outer2
+{
+ protected int field;
+
+ public class Inner<U> where U : Outer2
+ {
+ public int Method(U param) { return (++param.field); }
+ }
+}
+class Outer3<T>
+{
+ protected int field;
+
+ public class Inner
+ {
+ public int Method(Outer3<T> param) { return (++param.field); }
+ }
+}
+class Outer4<T>
+{
+ protected int field;
+
+ public class Inner<U> where U : Outer4<T>
+ {
+ public int Method(U param) { return (++param.field); }
+ }
+}
+
+
+
+//==================== Cases of derived classes ====================//
+class Base1
+{
+ protected int field;
+}
+class Derived1 : Base1
+{
+ public class Inner
+ {
+ public int Method(Derived1 param) { return (++param.field); }
+ }
+}
+class Base2
+{
+ protected int field;
+}
+class Derived2<T> : Base2
+{
+ public class Inner
+ {
+ public int Method(Derived2<T> param) { return (++param.field); }
+ }
+}
+class Base3<T>
+{
+ protected int field;
+}
+class Derived3 : Base3<string>
+{
+ public class Inner
+ {
+ public int Method(Derived3 param) { return (++param.field); }
+ }
+}
+class Base4<T>
+{
+ protected int field;
+}
+class Derived4<T> : Base4<T>
+{
+ public class Inner
+ {
+ public int Method(Derived4<T> param) { return (++param.field); }
+ }
+}
+
+
+public class Test
+{
+ static bool Success = true;
+
+ static void NestedClassesTest()
+ {
+ int res;
+
+ //==================== Cases of nested classes ====================//
+ Outer1.Inner inner1 = new Outer1.Inner();
+ res = inner1.Method(new Outer1());
+ Console.WriteLine("Outer1.Inner.Method(new Outer1()) = " + res);
+ if (res != 1) Success = false;
+
+ Outer2.Inner<Outer2> inner2 = new Outer2.Inner<Outer2>();
+ res = inner2.Method(new Outer2());
+ Console.WriteLine("Outer2.Inner<Outer2>.Method(new Outer2()) = " + res);
+ if (res != 1) Success = false;
+
+ Outer3<string>.Inner inner3 = new Outer3<string>.Inner();
+ res = inner3.Method(new Outer3<string>());
+ Console.WriteLine("Outer3<string>.Inner.Method(new Outer3<string>()) = " + res);
+ if (res != 1) Success = false;
+
+ Outer4<string>.Inner<Outer4<string>> inner4 = new Outer4<string>.Inner<Outer4<string>>();
+ res = inner4.Method(new Outer4<string>());
+ Console.WriteLine("Outer4<string>.Inner<Outer4<string>>.Method(new Outer4<string>()) = " + res);
+ if (res != 1) Success = false;
+ }
+
+ static void DerivedClassesTest()
+ {
+ int res;
+
+ //==================== Cases of derived classes ====================//
+ Derived1.Inner inner1 = new Derived1.Inner();
+ res = inner1.Method(new Derived1());
+ Console.WriteLine("Derived1.Inner.Method(new Derived1()) = " + res);
+ if (res != 1) Success = false;
+
+ Derived2<string>.Inner inner2 = new Derived2<string>.Inner();
+ res = inner2.Method(new Derived2<string>());
+ Console.WriteLine("Derived2<string>.Inner.Method(new Derived2<string>()) = " + res);
+ if (res != 1) Success = false;
+
+ Derived3.Inner inner3 = new Derived3.Inner();
+ res = inner3.Method(new Derived3());
+ Console.WriteLine("Derived3.Inner.Method(new Derived3()) = " + res);
+ if (res != 1) Success = false;
+
+ Derived4<string>.Inner inner4 = new Derived4<string>.Inner();
+ res = inner4.Method(new Derived4<string>());
+ Console.WriteLine("Derived4<string>.Inner.Method(new Derived4<string>()) = " + res);
+ if (res != 1) Success = false;
+ }
+
+
+ static int Main()
+ {
+ NestedClassesTest();
+ Console.WriteLine();
+
+ DerivedClassesTest();
+ Console.WriteLine();
+
+ if (Success)
+ {
+ Console.WriteLine("Pass");
+ return 100;
+ }
+ Console.WriteLine("Fail");
+ return -1;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj
new file mode 100644
index 0000000000..cdd41d6a45
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_724989</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_724989.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il
new file mode 100644
index 0000000000..b2df9c7e02
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il
@@ -0,0 +1,200 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib {}
+.assembly Generated0 {}
+.module Generated0.exe
+
+.class public sequential sealed MyStruct0 extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+ .method public hidebysig virtual instance bool Equals(object obj) cil managed { ldc.i4.0 ret }
+ .method public hidebysig virtual instance int32 GetHashCode() cil managed { ldc.i4.0 ret }
+ .method public hidebysig virtual instance string ToString() cil managed { ldstr "ToString()" ret }
+}
+.class public sequential sealed MyStruct1`1<T0> extends [mscorlib]System.ValueType
+{
+ .pack 0
+ .size 1
+ .method public hidebysig virtual instance bool Equals(object obj) cil managed { ldc.i4.0 ret }
+ .method public hidebysig virtual instance int32 GetHashCode() cil managed { ldc.i4.0 ret }
+ .method public hidebysig virtual instance string ToString() cil managed { ldstr "ToString()" ret }
+}
+.class private auto ansi beforefieldinit Framework {
+ .method public hidebysig static void StructCallvirtVerificationTest() cil managed
+ {
+ .maxstack 10
+ ldstr "========================== Struct Callvirt Verification Test =========================="
+ call void [System.Console]System.Console::WriteLine(string)
+
+ //Testing with a non-generic struct:
+ .locals init (valuetype MyStruct0 V_1)
+ ldloca V_1
+ initobj valuetype MyStruct0
+ .try {
+ ldloca V_1
+ ldnull
+ callvirt instance bool valuetype MyStruct0::Equals(object obj)
+ call void [System.Console]System.Console::WriteLine(bool)
+ leave.s LV6
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException1"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV6
+ } LV6:
+ .try {
+ ldloca V_1
+ callvirt
+ instance int32 valuetype MyStruct0::GetHashCode()
+ call void [System.Console]System.Console::WriteLine(int32)
+ leave.s LV7
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException2"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV7
+ } LV7:
+ .try {
+ ldloca V_1
+ callvirt instance string valuetype MyStruct0::ToString()
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV8
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException3"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV8
+ } LV8:
+ .try {
+ ldloca V_1
+ ldnull
+ constrained. valuetype MyStruct0
+ callvirt instance bool valuetype MyStruct0::Equals(object)
+ call void [System.Console]System.Console::WriteLine(bool)
+ leave.s LV9
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException4"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV9
+ } LV9:
+ .try {
+ ldloca V_1
+ constrained. valuetype MyStruct0
+ callvirt instance int32 valuetype MyStruct0::GetHashCode()
+ call void [System.Console]System.Console::WriteLine(int32)
+ leave.s LV10
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException5"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV10
+ } LV10:
+ .try {
+ ldloca V_1
+ constrained. valuetype MyStruct0
+ callvirt instance string valuetype MyStruct0::ToString()
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV11
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException6"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV11
+ } LV11:
+
+ //Testing with a generic struct:
+ .locals init (valuetype MyStruct1`1<string> V_2)
+ ldloca V_2
+ initobj valuetype MyStruct1`1<string>
+ .try {
+ ldloca V_2
+ ldnull
+ callvirt instance bool valuetype MyStruct1`1<string>::Equals(object obj)
+ call void [System.Console]System.Console::WriteLine(bool)
+ leave.s LV14
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException7"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV14
+ } LV14:
+ .try {
+ ldloca V_2
+ callvirt instance int32 valuetype MyStruct1`1<string>::GetHashCode()
+ call void [System.Console]System.Console::WriteLine(int32)
+ leave.s LV15
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException8"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV15
+ } LV15:
+ .try {
+ ldloca V_2
+ callvirt instance string valuetype MyStruct1`1<string>::ToString()
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV16
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException9"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV16
+ } LV16:
+ .try {
+ ldloca V_2
+ ldnull
+ constrained. valuetype MyStruct1`1<string>
+ callvirt instance bool valuetype MyStruct1`1<string>::Equals(object)
+ call void [System.Console]System.Console::WriteLine(bool)
+ leave.s LV17
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException10"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV17
+ } LV17:
+ .try {
+ ldloca V_2
+ constrained. valuetype MyStruct1`1<string>
+ callvirt instance int32 valuetype MyStruct1`1<string>::GetHashCode()
+ call void [System.Console]System.Console::WriteLine(int32)
+ leave.s LV18
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException11"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV18
+ } LV18:
+ .try {
+ ldloca V_2
+ constrained. valuetype MyStruct1`1<string>
+ callvirt instance string valuetype MyStruct1`1<string>::ToString()
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV19
+ } catch [mscorlib]System.Security.VerificationException {
+ pop
+ ldstr "VerificationException12"
+ call void [System.Console]System.Console::WriteLine(string)
+ leave.s LV19
+ } LV19:
+
+ ldstr "=======================================================================================\n\n"
+ call void [System.Console]System.Console::WriteLine(string)
+ ret
+ }
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 10
+
+ call void Framework::StructCallvirtVerificationTest()
+
+ ldc.i4 100
+ ret
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj
new file mode 100644
index 0000000000..948174ee70
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_788724</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_788724.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs
new file mode 100644
index 0000000000..dac3b25b37
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs
@@ -0,0 +1,38 @@
+// 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.
+
+using System;
+
+struct A<T> { }
+struct B<T> { }
+
+interface Interface<T>
+{ A<T> InterfaceFunc(); }
+
+class Base<T>
+{ public virtual B<T> Func() { return default(B<T>); } }
+
+class C<U,T> where U:Base<T>, Interface<T>
+{
+ public static void CallFunc(U u) { u.Func(); }
+ public static void CallInterfaceFunc(U u) { u.InterfaceFunc(); }
+}
+
+class Problem : Base<object>, Interface<object>
+{
+ public A<object> InterfaceFunc() { return new A<object>(); }
+ public override B<object> Func() { return new B<object>(); }
+}
+
+class Test
+{
+ static int Main()
+ {
+ C<Problem, object>.CallFunc(new Problem());
+ C<Problem, object>.CallInterfaceFunc(new Problem());
+
+ Console.WriteLine("Pass");
+ return 100;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj
new file mode 100644
index 0000000000..57abc23577
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_794943</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_794943.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs
new file mode 100644
index 0000000000..5e620289cd
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs
@@ -0,0 +1,29 @@
+// 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.
+
+//Non-generic classes A and B
+
+public class HelloWorld
+{
+ public static int Main()
+ {
+ try { B b = new B(GetName()); }
+ catch (System.Exception)
+ {
+ System.Console.WriteLine("PASS");
+ return 100;
+ }
+ System.Console.WriteLine("FAIL");
+ return -1;
+ }
+ public static string GetName() { throw new System.Exception(); }
+}
+
+public class B : A
+{
+ public B(string name)
+ {
+ System.Console.WriteLine("Creating object B({0})", name);
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj
new file mode 100644
index 0000000000..00ee550d61
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Case1</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Case1.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Library1.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs
new file mode 100644
index 0000000000..30c4896d22
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs
@@ -0,0 +1,29 @@
+// 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.
+
+//Non-generic classe A and generic class B
+
+public class HelloWorld
+{
+ public static int Main()
+ {
+ try { B<string> b = new B<string>(GetName()); }
+ catch (System.Exception)
+ {
+ System.Console.WriteLine("PASS");
+ return 100;
+ }
+ System.Console.WriteLine("FAIL");
+ return -1;
+ }
+ public static string GetName() { throw new System.Exception(); }
+}
+
+public class B<T> : A
+{
+ public B(string name)
+ {
+ System.Console.WriteLine("Creating object B({0})", name);
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj
new file mode 100644
index 0000000000..2ce9c9f380
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Case2</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Case2.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Library1.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs
new file mode 100644
index 0000000000..fe690176a7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs
@@ -0,0 +1,29 @@
+// 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.
+
+//Non-generic class B and generic class A
+
+public class HelloWorld
+{
+ public static int Main()
+ {
+ try { B b = new B(GetName()); }
+ catch (System.Exception)
+ {
+ System.Console.WriteLine("PASS");
+ return 100;
+ }
+ System.Console.WriteLine("FAIL");
+ return -1;
+ }
+ public static string GetName() { throw new System.Exception(); }
+}
+
+public class B : A<string>
+{
+ public B(string name)
+ {
+ System.Console.WriteLine("Creating object B({0})", name);
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj
new file mode 100644
index 0000000000..feeadba56f
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Case3</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Case3.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Library2.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs
new file mode 100644
index 0000000000..745f23a504
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs
@@ -0,0 +1,29 @@
+// 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.
+
+//generic classes A and B
+
+public class HelloWorld
+{
+ public static int Main()
+ {
+ try { B<string> b = new B<string>(GetName()); }
+ catch (System.Exception)
+ {
+ System.Console.WriteLine("PASS");
+ return 100;
+ }
+ System.Console.WriteLine("FAIL");
+ return -1;
+ }
+ public static string GetName() { throw new System.Exception(); }
+}
+
+public class B<T> : A<T>
+{
+ public B(string name)
+ {
+ System.Console.WriteLine("Creating object B({0})", name);
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj
new file mode 100644
index 0000000000..1938afa62e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>Case4</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Case4.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Library2.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs
new file mode 100644
index 0000000000..833baedb2c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs
@@ -0,0 +1,11 @@
+// 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.
+
+public class A
+{
+ ~A()
+ {
+ System.Console.WriteLine("Class A finalizer called");
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj
new file mode 100644
index 0000000000..0fa4e8c6e3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Library1</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Library1.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs
new file mode 100644
index 0000000000..d7e68082f1
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs
@@ -0,0 +1,11 @@
+// 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.
+
+public class A<T>
+{
+ ~A()
+ {
+ System.Console.WriteLine("Class A finalizer called");
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj
new file mode 100644
index 0000000000..4f8b714076
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Library2</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Library2.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs
new file mode 100644
index 0000000000..398508d7e9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs
@@ -0,0 +1,51 @@
+// 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.
+
+using System;
+
+/// <summary>
+/// Regression test case for Dev10 851479 bug: Stackoverflow in .NET when using self referencing generics along with type constraints to another type parameter.
+/// </summary>
+class Program
+{
+ static Int32 Main()
+ {
+ Program p = new Program();
+
+ if (p.Run())
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL");
+ return -1;
+ }
+ }
+
+ public Boolean Run()
+ {
+ try
+ {
+ var B = new B();
+ System.Console.WriteLine(B);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("Got unexpected error: " + ex);
+ return false;
+ }
+
+ return true;
+ }
+}
+
+class A<T, U>
+ where T : U
+ where U : A<T, U> { }
+
+class B : A<B, B>
+{
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj
new file mode 100644
index 0000000000..8f23535bde
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_851479</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_851479.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs
new file mode 100644
index 0000000000..0b6d8dadb9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs
@@ -0,0 +1,27 @@
+// 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.
+
+using System;
+using System.IO;
+
+interface IFoo {
+ void foo();
+}
+
+class My {
+ static int Main()
+ {
+ try {
+ IFoo s = null;
+ s.foo();
+ }
+ catch (NullReferenceException) {
+ Console.WriteLine("Successfully caught a null reference exception.");
+ return 100;
+ }
+
+ Console.WriteLine("Failed!!");
+ return -1;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj
new file mode 100644
index 0000000000..b5d56cad44
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev10_889822</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_889822.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/Test.il b/tests/src/Loader/classloader/regressions/dev10_897464/Test.il
new file mode 100644
index 0000000000..7177f3a225
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_897464/Test.il
@@ -0,0 +1,38 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib
+{
+}
+
+.assembly Test
+{
+ .hash algorithm 0x00008004
+ .ver 1:0:0:0
+}
+
+.module Test.dll
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+
+.field public static literal valuetype Test.MyEnum LiteralValue = int32(0x00000001)
+
+.class public auto ansi sealed Test.MyEnum
+ extends [mscorlib]System.Enum
+{
+ .field public specialname rtspecialname int32 value__
+ .field public static literal valuetype Test.MyEnum Zero = int32(0x00000000)
+ .field public static literal valuetype Test.MyEnum One = int32(0x00000001)
+}
+
+
+// Just here so we can reference something
+/*.class interface public abstract auto ansi Test.IEmpty
+{
+}
+*/
diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj b/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj
new file mode 100644
index 0000000000..77903b344b
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Test</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Test.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs
new file mode 100644
index 0000000000..7f3df9ca99
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs
@@ -0,0 +1,43 @@
+// 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.
+
+using System;
+
+/// <summary>
+/// Regression test case for Dev10 897464 bug: Assemblies that contain global values will work with .NET 2.0 but fail with a BadImageFormat exception on .NET 4.0
+/// </summary>
+class Program
+{
+ static Int32 Main()
+ {
+ Program p = new Program();
+
+ if (p.Run())
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL");
+ return -1;
+ }
+ }
+
+ public Boolean Run()
+ {
+ try
+ {
+ var v = Test.MyEnum.Zero;
+ Console.WriteLine(v);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("Got unexpected error: " + ex);
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj
new file mode 100644
index 0000000000..376e93dcc7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>dev10_897464</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev10_897464.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="Test.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il
new file mode 100644
index 0000000000..b966c9b8ad
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il
@@ -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.
+
+.assembly extern System.Console { }
+// Generated by Synergy .NET compiler.
+
+.language '{EF62B8E3-E73E-4E46-8D14-02F45EC1D07B}',
+ '{994B45C4-E6E9-11D2-903F-00C04FA302A1}',
+ '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
+.assembly extern System { auto }
+.line 1 'c:\\wrk\\dbl\\src\\cmp_new\\cons7.dbl'
+.assembly extern 'mscorlib'
+{
+ .ver 2:0:0:0
+ .publickey = ( 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 )
+}
+.assembly 'CONS7' {}
+.module 'CONS7.exe'
+
+
+
+.class private sealed specialname _Synergy._Synergy {}
+
+
+.namespace '_NS_CONS7'
+{
+ .class public auto ansi _CL
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGlobalScopeAttribute::.ctor() = ( 01 00 00 00 )
+ }
+}
+
+.namespace 'ns1'
+{
+ .class public auto ansi beforefieldinit 'MyGeneric`1'<T> extends ['mscorlib']'System'.'Object'
+ {
+ .method public hidebysig virtual final instance void 'test' () cil managed
+ {
+ .locals init ([0] class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0> 'w')
+ .line 6 'c:\\wrk\\dbl\\src\\cmp_new\\cons7.dbl'
+ .maxstack 8
+ newobj instance void class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0>::.ctor()
+ stloc 'w'
+ _01:
+ ret
+ }
+ .class nested private sealed explicit '$$_#1@test_2123805122' extends [mscorlib]System.ValueType
+ {
+ .size 8
+ }
+ .class nested private sealed auto '$$_wrap_#1@test_2123805122'<T> extends [mscorlib]System.Object
+ {
+ .data '$data_ns1_test_#1_2123805122' = bytearray(00 00 00 00 00 00 00 00 )
+ .field public static initonly valuetype ns1.MyGeneric`1/'$$_#1@test_2123805122' $initstr at '$data_ns1_test_#1_2123805122'
+ .method public specialname void .ctor()
+ {
+ .maxstack 8
+ .locals init ([0] native int iptr)
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ldsflda valuetype ns1.MyGeneric`1/'$$_#1@test_2123805122' class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0>::$initstr
+ pop
+ ret
+ }
+ }
+ .method public specialname void .ctor () cil managed
+ {
+ ldarg.0
+ call instance void object::.ctor()
+ .maxstack 8
+ _01:
+ ret
+ }
+ }
+}
+
+.namespace '_NS_CONS7'
+{
+ .class public auto ansi _CL
+ {
+ .custom instance void [System]System.ComponentModel.EditorBrowsableAttribute::.ctor(valuetype [System]System.ComponentModel.EditorBrowsableState) = ( 01 00 01 00 00 00 00 00 )
+ .method public hidebysig static int32 MAIN$CONS7(string[] args) cil managed
+ {
+ .entrypoint
+ .locals init ( [0] class 'ns1'.'MyGeneric`1'<object> 'g')
+ .line 15
+ .maxstack 8
+ newobj instance void class 'ns1'.'MyGeneric`1'<object>::.ctor()
+ stloc.0
+ .line 17
+ ldloc.0
+ call instance void class 'ns1'.'MyGeneric`1'<object>::'test'()
+ _01:
+ ldstr "PASS"
+ call void class [System.Console]System.Console::WriteLine(string)
+ ldc.i4 100
+ ret
+ }
+ }
+}
+
diff --git a/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj
new file mode 100644
index 0000000000..8e3b28d7b7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev11_11333</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev11_11333.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/Library.il b/tests/src/Loader/classloader/regressions/dev11_221340/Library.il
new file mode 100644
index 0000000000..03472b499c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_221340/Library.il
@@ -0,0 +1,17 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib {}
+.assembly Library {}
+
+.class public auto ansi sealed MyClass1
+{
+ .field public int32 myValue1
+}
+
+.class public auto ansi MyClass2 extends MyClass1
+{
+ .field public int32 myValue2
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj b/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj
new file mode 100644
index 0000000000..a0aa82e250
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Library</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Library.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il
new file mode 100644
index 0000000000..5c508462c3
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il
@@ -0,0 +1,42 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib
+{
+ .ver 2:0:5:0
+ .publickeytoken = (b7 7a 5c 56 19 34 e0 89)
+}
+
+//Header for this dll
+.assembly TestLib
+{
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module TestLib.dll
+
+//The parent-class wich inherits enum
+.class public auto ansi VA
+ extends [mscorlib]System.Enum
+{
+
+ .field public specialname rtspecialname int32 value__
+
+ .field public static literal valuetype VA None = int32(0)
+ .field public static literal valuetype VA Leet = int32(1337)
+
+}
+
+//The vulnerable object: Enum.ToObject will overwrite both: the actual value of the enum (int32) and the obj-field (actually a pointer)
+.class public auto ansi UB1
+ extends VA
+{
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed
+ {
+ ret
+ }
+ .field public class [mscorlib]System.Object obj
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj
new file mode 100644
index 0000000000..30a31a9fff
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>TestLib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="TestLib.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs b/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs
new file mode 100644
index 0000000000..5673cc4066
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs
@@ -0,0 +1,19 @@
+// 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.
+
+public interface I
+{
+ void M();
+}
+
+public class A : I
+{
+ public virtual void M() {}
+}
+
+public class B_JIT : A
+{
+ // Just to make sure that we do not have shared VTable indirection with parent
+ public virtual void M2() {}
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj b/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj
new file mode 100644
index 0000000000..c75fd114de
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Library</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Library.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs
new file mode 100644
index 0000000000..ebf5e58c0e
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs
@@ -0,0 +1,21 @@
+// 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.
+
+using System;
+
+public class Base<T>
+{
+}
+
+public class Child<T> : Base<T>
+{
+}
+
+public class VarType
+{
+ static public void foo<T>()
+ {
+ Console.WriteLine(typeof(T).ToString());
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj
new file mode 100644
index 0000000000..f4fa7821b2
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>Lib</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="Lib.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs
new file mode 100644
index 0000000000..04a3e35e8b
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs
@@ -0,0 +1,10 @@
+// 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.
+
+using System;
+// this struct will be referenced via type forwarder
+public struct ProblematicStructThatIsForwarded
+{
+ public int value;
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj
new file mode 100644
index 0000000000..539161c033
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>LibraryThatImplementsStruct</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="LibraryThatImplementsStruct.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj b/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj
new file mode 100644
index 0000000000..cadca984f7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>TypeForwarderLibrary</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="LibraryThatImplementsStruct.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs
new file mode 100644
index 0000000000..7c27539deb
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs
@@ -0,0 +1,46 @@
+// 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.
+
+/* Regression Test for Dev11 bug #95728: LINQ/CLR :: Accessing a static generic field <String> causes CLR to crash with FatalExecutionEngineError
+*
+* Comments from bug: FatalExecutionEngineError: The runtime has encountered a fatal error. The address of the error was at 0x71ff5dcd,
+* on thread 0x7f4. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user
+* code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
+*/
+
+using System;
+using System.Linq.Expressions;
+
+namespace StaticFieldBug
+{
+ public class StubClass<T>
+ {
+ public StubClass(T value)
+ {
+ StubClass<T>.StaticField = value;
+ }
+ public static T StaticField = default(T);
+ public static T StaticProperty
+ {
+ get { return StaticField; }
+ }
+ }
+
+ class Program
+ {
+ static int Main(string[] args)
+ {
+ Foo<string>("Run me to crash LINQ...");
+
+ Console.WriteLine("PASS (we didn't crash)!");
+ return 100;
+ }
+ public static void Foo<T>(T value)
+ {
+ Expression<Func<int, T>> lambda;
+ StubClass<T> foo = new StubClass<T>((T)value);
+ lambda = i => StubClass<T>.StaticField;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj
new file mode 100644
index 0000000000..893005c41d
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>dev11_95728</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="dev11_95728.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw111021/main.cs b/tests/src/Loader/classloader/regressions/vsw111021/main.cs
new file mode 100644
index 0000000000..7a107d7f00
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw111021/main.cs
@@ -0,0 +1,30 @@
+// 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.
+
+using System;
+public class CMain{
+ public static int Count = 0;
+ public static int Main(String[] args){
+ String s;
+ s = Gen<String>.x;
+ // we expect the Gen<T>.cctor to fire only once!
+ if(1 == Count){
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else{
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+}
+
+public class Gen<T>{
+
+ public static T x;
+ static Gen(){
+ CMain.Count++;
+ Console.WriteLine("cctor. Type: {0}",typeof(T).ToString());
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/vsw111021/main.csproj b/tests/src/Loader/classloader/regressions/vsw111021/main.csproj
new file mode 100644
index 0000000000..2719060551
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw111021/main.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>main</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="main.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il
new file mode 100644
index 0000000000..41468e99c7
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il
@@ -0,0 +1,224 @@
+// 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.
+
+.assembly extern System.Console { }
+
+// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.31013.0
+// Copyright (C) Microsoft Corporation 1998-2003. All rights reserved.
+
+
+
+// Metadata version: v2.0.31013
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .hash = (0B D1 C7 0E 65 8B 67 F1 ED 21 D0 6D D4 DD 89 7A // ....e.g..!.m...z
+ 37 E9 11 BE ) // 7...
+ .ver 2:0:3600:0
+}
+.assembly initialize
+{
+
+ // --- The following custom attribute is added automatically, do not uncomment -------
+ // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
+ // bool) = ( 01 00 00 01 00 00 )
+
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+}
+.module initialize.exe
+// MVID: {31E86D7D-808F-4F1C-A755-94B3084C6466}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003 // WINDOWS_CUI
+.corflags 0x00000001 // ILONLY
+// Image base: 0x03FA0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class sealed private auto ansi beforefieldinit C<([mscorlib]System.Object) T>
+ extends [mscorlib]System.ValueType
+{
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 75 (0x4b)
+ .maxstack 4
+ IL_0006: ldc.i4.1
+ IL_0007: stsfld bool Test::run
+ IL_000c: ldtoken !0
+ IL_0011: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0016: ldsfld class [mscorlib]System.Type Test::t
+ IL_001b: beq.s IL_004a
+
+ IL_001d: ldstr "C.typeof, typeof(T) = "
+ IL_0022: ldtoken !0
+ IL_0027: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_002c: callvirt instance string [mscorlib]System.Object::ToString()
+ IL_0031: ldstr ", Test.t = "
+ IL_0036: ldsfld class [mscorlib]System.Type Test::t
+ IL_003b: callvirt instance string [mscorlib]System.Object::ToString()
+ IL_0040: call string [mscorlib]System.String::Concat(string,
+ string,
+ string,
+ string)
+ IL_0045: call void Test::fail(string)
+ IL_004a: ret
+ } // end of method C::.ctor
+
+} // end of valuetype C
+
+.class private auto ansi beforefieldinit Test
+ extends [mscorlib]System.Object
+{
+ .field public static class [mscorlib]System.Type t
+ .field public static bool run
+ .field private static int32 failures
+ .method public hidebysig static void fail(string msg) cil managed
+ {
+ // Code size 24 (0x18)
+ .maxstack 8
+ IL_0000: ldstr "Failure: {0}"
+ IL_0005: ldarg.0
+ IL_0006: call void [System.Console]System.Console::WriteLine(string,
+ object)
+ IL_000b: ldsfld int32 Test::failures
+ IL_0010: ldc.i4.1
+ IL_0011: add
+ IL_0012: stsfld int32 Test::failures
+ IL_0017: ret
+ } // end of method Test::fail
+
+ .method private hidebysig static int32
+ Main() cil managed
+ {
+ .entrypoint
+ // Code size 247 (0xf7)
+ .maxstack 5
+ .locals init (valuetype C<int32>[] V_0,
+ valuetype C<string>[] V_1,
+ valuetype C<string[]>[] V_2,
+ valuetype C<object>[] V_3,
+ int32 V_4)
+
+ IL_0000: ldc.i4.0
+ IL_0001: stsfld bool Test::run
+ IL_0006: ldtoken [mscorlib]System.Int32
+ IL_000b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0010: stsfld class [mscorlib]System.Type Test::t
+ IL_0015: ldc.i4.1
+ IL_0016: newarr valuetype C<int32>
+ IL_001b: stloc.0
+ IL_001c: ldloc.0
+ IL_001d: callvirt instance void [mscorlib]System.Array::Initialize()
+ IL_0022: ldsfld bool Test::run
+ IL_0027: brtrue.s IL_0033
+ IL_0029: ldstr "contructor not run"
+ IL_002e: call void Test::fail(string)
+
+
+
+ IL_0033: ldstr "C<int> passed" call void [System.Console]System.Console::WriteLine(string)
+
+ ldc.i4.0
+ IL_0034: stsfld bool Test::run
+ IL_0039: ldtoken [mscorlib]System.String
+ IL_003e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0043: stsfld class [mscorlib]System.Type Test::t
+ IL_0048: ldc.i4.1
+ IL_0049: newarr valuetype C<string>
+ IL_004e: stloc.1
+ IL_004f: ldloc.1
+ IL_0050: callvirt instance void [mscorlib]System.Array::Initialize()
+ IL_0055: ldsfld bool Test::run
+ IL_005a: brtrue.s IL_0066
+
+ IL_005c: ldstr "contructor not run"
+ IL_0061: call void Test::fail(string)
+ IL_0066: ldstr "C<string> passed" call void [System.Console]System.Console::WriteLine(string)
+
+ ldc.i4.0
+ IL_0067: stsfld bool Test::run
+ IL_006c: ldtoken string[]
+ IL_0071: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0076: stsfld class [mscorlib]System.Type Test::t
+ IL_007b: ldc.i4.1
+ IL_007c: newarr valuetype C<string[]>
+ IL_0081: stloc.2
+ IL_0082: ldloc.2
+ IL_0083: callvirt instance void [mscorlib]System.Array::Initialize()
+ IL_0088: ldsfld bool Test::run
+ IL_008d: brtrue.s IL_0099
+
+ IL_008f: ldstr "contructor not run"
+ IL_0094: call void Test::fail(string)
+ IL_0099: ldstr "C<string[]> passed" call void [System.Console]System.Console::WriteLine(string)
+
+ ldc.i4.0
+ IL_009a: stsfld bool Test::run
+ IL_009f: ldtoken [mscorlib]System.Object
+ IL_00a4: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_00a9: stsfld class [mscorlib]System.Type Test::t
+ IL_00ae: ldc.i4.1
+ IL_00af: newarr valuetype C<object>
+ IL_00b4: stloc.3
+ IL_00b5: ldloc.3
+ IL_00b6: callvirt instance void [mscorlib]System.Array::Initialize()
+ IL_00bb: ldsfld bool Test::run
+ IL_00c0: brtrue.s IL_00cc
+
+ IL_00c2: ldstr "contructor not run"
+ IL_00c7: call void Test::fail(string)
+ IL_00cc: ldstr "C<object> passed" call void [System.Console]System.Console::WriteLine(string)
+
+ ldsfld int32 Test::failures
+ IL_00d1: ldc.i4.0
+ IL_00d2: ble.s IL_00e4
+
+ IL_00d4: ldstr "Test Failed"
+ IL_00d9: call void [System.Console]System.Console::WriteLine(string)
+ IL_00de: ldc.i4.s 99
+ IL_00e0: stloc.s V_4
+ IL_00e2: br.s IL_00f4
+
+ IL_00e4: ldstr "Test Passed"
+ IL_00e9: call void [System.Console]System.Console::WriteLine(string)
+ IL_00ee: ldc.i4.s 100
+ IL_00f0: stloc.s V_4
+ IL_00f2: br.s IL_00f4
+
+ IL_00f4: ldloc.s V_4
+ IL_00f6: ret
+ } // end of method Test::Main
+
+ .method private hidebysig specialname rtspecialname static
+ void .cctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldc.i4.0
+ IL_0001: stsfld int32 Test::failures
+ IL_0006: ret
+ } // end of method Test::.cctor
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ // Code size 7 (0x7)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [mscorlib]System.Object::.ctor()
+ IL_0006: ret
+ } // end of method Test::.ctor
+
+} // end of class Test
+
+
+// =============================================================
+
+//*********** DISASSEMBLY COMPLETE ***********************
+// WARNING: Created Win32 resource file initialize-struct.res
diff --git a/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj
new file mode 100644
index 0000000000..1708db6d4c
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw188290</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw188290.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il
new file mode 100644
index 0000000000..f0dba5c6e8
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il
@@ -0,0 +1,74 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib { }
+.assembly GenericAssert
+{
+ .hash algorithm 0x00008004
+ .ver 0:0:0:0
+ .custom instance void [mscorlib]System.Security.SecurityRulesAttribute::.ctor(valuetype [mscorlib]System.Security.SecurityRuleSet) = ( 01 00 02 00 00 ) .custom instance void [mscorlib]System.Security.SecurityTransparentAttribute::.ctor() = ( 01 00 00 00 )
+ .permissionset reqrefuse
+ "<PermissionSet class=\"System.Security.PermissionSet\" version=\"1\">" +
+ "<IPermission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600, Culture=neutral, PublicKeyToken=b77a5c561934e089\" version=\"1\"" +
+ "Flags=\"SkipVerification\"/>" +
+ "</PermissionSet>"
+}
+.module GenericAssert
+
+.class interface public ContraVariantInterface<-T> { }
+.class public interface StandardInterface { }
+
+.class public A extends [mscorlib]System.Object implements StandardInterface
+{
+ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed
+ {
+ .maxstack 1
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ }
+}
+
+.class public GenericAssert
+{
+ .method public hidebysig static int32 Main() cil managed
+ {
+ .entrypoint
+ .maxstack 8
+
+ .try
+ {
+ // get the type of ContraVariantInterface<A>
+ ldtoken class ContraVariantInterface<class A>
+ call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+
+ // now get the type of StandardInterface
+ ldtoken class StandardInterface
+ call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+
+ // make sure they're compatible
+ callvirt instance bool [mscorlib]System.Type::IsAssignableFrom(class [mscorlib]System.Type)
+ leave PASS
+ }
+ catch [mscorlib]System.Exception
+ {
+
+ leave FAIL
+ }
+
+PASS:
+ ldc.i4 100
+ ldstr "Pass"
+ call void [System.Console]System.Console::WriteLine(string)
+ ret
+
+FAIL:
+ ldc.i4 101
+ ldstr "FAIL"
+ call void [System.Console]System.Console::WriteLine(string)
+ ret
+ }
+}
+
diff --git a/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj
new file mode 100644
index 0000000000..c4664e5150
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>GenericAssertin</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="GenericAssert.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs
new file mode 100644
index 0000000000..bdd05d03d9
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs
@@ -0,0 +1,66 @@
+// 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.
+
+// this is regression test for VSW 307137
+
+/*
+The bug description has a good summary of the issue (from AtsushiK):
+
+A summary of the whole sordid affair.
+
+
+In V1 and Everett, sequential classes only affected unmanaged layout and the .size metadata was used to add padding to the
+unmanaged layout (IJW used this to implement their unmanaged structures. That's the only reason the .size metadata exists.
+Somewhere along the line, C# started using the .size metadata to implemented fixed buffer arrays inside managed structures.
+They'd declare just one field of the array element type and use the .size metadata to allocate space for the other elements.
+Problem was, the .size metadata was never defined to expand the managed layout. This feature should never have worked.
+
+So how did it work for them? Plain dumb luck. In the CLR, if your structure consists of just one scalar-type field, the CLR
+classifies it internally as a "blittable" structure. That is, it makes the managed layout match the unmanaged layout byte for
+byte so that interop can optimize the marshaling of this structure to a bit-copy. Thus, because of this accidental reliance on
+this internal optimization by the CLR, fixed buffers "worked" for plain old integer/float/double types.
+There was two cases where it wouldn't work: chars and booleans. That's because these datatypes don't translate byte for
+byte (different sizes, bools need normalizing.) So the blitting optimization doesn't kick in in those cases.
+
+Someone found out that the was case for chars and opened VSW:147145. A couple months later, I unwittingly"fixed" this bug
+when I implemented the managed sequential layout feature. This feature now causes the .size metadata to expand out the
+managed layout too (whether this was a good idea is debatable but it got VSW:147145 off the CLR team's back even though
+they didn't understand how it got fixed..)
+
+Now we have the boolean case. Booleans are also non-blittable (they have to be normalized so they aren't blittable even if you
+use a FieldMarshal override to force the native size to 1.) But because both the unmanaged size and managed size impose a
+minimum value on the .size metadata, the .size metadata can't go below 4 (sizeof(BOOL) in Win32 native).
+
+CLR now overrides the .size metadata if it is less than the minimum size needed to hold the fields.
+
+*/
+
+using System;
+
+unsafe struct S
+{
+ fixed bool b[3];
+}
+
+public class Test
+{
+ public static int Main()
+ {
+ try
+ {
+ #pragma warning disable 219
+ S s = new S();
+ #pragma warning restore 219
+
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected excpetion: " + e);
+ return 101;
+ }
+ }
+
+}
diff --git a/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj
new file mode 100644
index 0000000000..c79c07d4cd
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw307137</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw307137.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il
new file mode 100644
index 0000000000..02341b48ba
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il
@@ -0,0 +1,53 @@
+// 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.
+
+.assembly extern System.Console { }
+.assembly extern mscorlib
+{
+ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+ .ver 2:0:0:0
+}
+
+.assembly moduleCctorThrow {}
+
+
+ .method private hidebysig specialname rtspecialname static
+ void .cctor() cil managed
+ {
+ .maxstack 8
+ nop
+ ldstr "Inside module .cctor"
+ call void [System.Console]System.Console::WriteLine(string)
+
+ newobj instance void [mscorlib]System.Exception::.ctor()
+ throw
+
+ ret
+ } // end of method Foo::.cctor
+
+
+
+.class public auto ansi TriggerModuleCctorClass
+ extends [mscorlib]System.Object
+{
+ .field public static int32 intStatic
+
+ .method public static void CheckInit() noinlining
+ {
+ ret
+ }
+
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+
+ .maxstack 8
+ ldarg.0
+ call instance void [mscorlib]System.Object::.ctor()
+ ret
+ } // end of method Test1::.ctor
+
+}
+
diff --git a/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj
new file mode 100644
index 0000000000..f0e33fa40a
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>moduleCctorThrow</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib>
+ <OutputType>Library</OutputType>
+ <CLRTestKind>BuildOnly</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="moduleCctorThrow.il" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs
new file mode 100644
index 0000000000..9bc966a1da
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs
@@ -0,0 +1,93 @@
+// 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.
+
+// regression test for VSWhidbey 529206 for throwing TypeInitialization inside module .cctor
+// We were appending every time the callstack and using the same exception object.
+// Now we still use the same object, but callstack is cleared every time.
+
+
+using System;
+using System.Runtime.CompilerServices;
+
+class Test
+{
+ public static bool pass;
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static void RunTest()
+ {
+ // TRIGGER: static field access, ref type
+ TriggerModuleCctorClass.intStatic = 5;
+ }
+
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static void RunTest2()
+ {
+ // TRIGGER: static field access, ref type
+ TriggerModuleCctorClass.intStatic = 5;
+ }
+
+ public static int Main()
+ {
+ pass = true;
+
+ try
+ {
+ RunTest();
+
+ Console.WriteLine("Did not catch expected TypeInitializationException exception");
+ pass = false;
+ }
+ catch (TypeInitializationException e)
+ {
+ Console.WriteLine("Caught expected exception 1st time\n" + e);
+
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception 1st time: " + e);
+ pass = false;
+ }
+
+
+ try
+ {
+ RunTest2();
+
+ Console.WriteLine("Did not catch expected TypeInitializationException exception");
+ pass = false;
+ }
+ catch (TypeInitializationException e )
+ {
+ Console.WriteLine("Caught expected exception 2nd time\n" + e);
+
+ // if this string is found in the callstack it means we're appending callstack
+ // instead of having a new one each time.
+ if (e.StackTrace.IndexOf("at Test.RunTest()") != -1)
+ {
+ Console.WriteLine("2nd time: Incorrect stack trace");
+ pass = false;
+ }
+
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Caught unexpected exception 2nd time: " + e);
+ pass = false;
+
+ }
+
+ if (pass)
+ {
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ else
+ {
+ Console.WriteLine("FAIL");
+ return 101;
+ }
+ }
+}
diff --git a/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj
new file mode 100644
index 0000000000..90fa1610e4
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj
@@ -0,0 +1,39 @@
+<?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>
+ <AssemblyName>vsw529206ModuleCctor</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="vsw529206ModuleCctor.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <ProjectReference Include="moduleCctorThrow.ilproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>
diff --git a/tests/src/Loader/classloader/regressions/vsw531159/repro.cs b/tests/src/Loader/classloader/regressions/vsw531159/repro.cs
new file mode 100644
index 0000000000..768bd8bfa0
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw531159/repro.cs
@@ -0,0 +1,30 @@
+// 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.
+
+using System;
+
+public class Gen<U>
+{
+ public void Meth<T>(T t) where T : struct, U {}
+}
+
+public class Test
+{
+ public static int Main()
+ {
+ try
+ {
+ Gen<System.ValueType> g1 = new Gen<ValueType>();
+ g1.Meth(1);
+ Console.WriteLine("PASS");
+ return 100;
+ }
+ catch(Exception e)
+ {
+ Console.WriteLine("cuaght unexpected exception \n {0}", e);
+ return 99;
+ }
+ }
+}
+
diff --git a/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj b/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj
new file mode 100644
index 0000000000..34dfb059ea
--- /dev/null
+++ b/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj
@@ -0,0 +1,35 @@
+<?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>
+ <AssemblyName>vsw531159</AssemblyName>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib>
+ <OutputType>Exe</OutputType>
+ <CLRTestKind>BuildAndRun</CLRTestKind>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+ <Visible>False</Visible>
+ </CodeAnalysisDependentAssemblyPaths>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Include="repro.cs" />
+ </ItemGroup>
+
+
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+</Project>